Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединение 3 таблиц. Вывод массива резудьтата.... в зависимости от условия 
:(
    Опции темы
Гриша
  Дата 15.2.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НУС(незнаю|узнаю|создаю)
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 12.6.2005
Где: Земля, Москва, Хр ущевка

Репутация: нет
Всего: 1



Здравствуйте.
# У меня есть задача, которую я не могу выполнить, я описываю ее ниже "## ЧТО Я ХОЧУ СДЕЛАТЬ ##".
# У меня есть одна идея "# МОИ СООБРАЖЕНИЯ #", но для этого мне нужно объединить 3 таблицы левосторонним объединением, чего я немогу сделать. И в общем-то если я смогу это сделать, возможно задача будет решена.
# И возможно посмотрев приведенные таблицы и прочитав интересующие меня условия вывода данных, вы сможете предложить простое решение, так как у меня знаний немного в PHP, и возможно я просто невижу простого решения.

ORDERS
|------------|-----------------|-------------|-------|---------------|
|*orderid*|*customerdid|*amount*|*pay*|***date**|
|------------|-----------------|-------------|-------|---------------|
|***1***|*****1*****|***25***|*yes*|*01-01-07*|
|***2***|*****2*****|***25***|*no**|*01-01-07*|
|***3***|*****3*****|***25***|*no**|*01-01-07*|
|***4***|*****4*****|***25***|*yes*|*01-01-07*|
|------------|-----------------|-------------|-------|---------------|

ORDER_DETAILS
|-----------|--------------|---------|-----------|---------|---------------|
|*orderid|*productid*|**iso*|*Cityid*|*foto**|*signature*|
|-----------|--------------|---------|-----------|---------|---------------|
|***1***|****1****|*RUS*|***11**|*1.jpg*|***none**|
|***2***|****2****|*RUS*|***12**|*2.jpg*|***none**|
|***3***|****3****|*RUS*|***13**|*3.jpg*|***none**|
|***4***|****4****|*RUS*|***14**|*4.jpg*|***none**|
|-----------|--------------|---------|-----------|---------|---------------|

COUNTRIES
|--------|---------------------|
|**iso*|***country****|
|--------|--------------------|
|*AUS*|**Австралия**|
|*AUT*|***Австрия***|
|*AZE*|*Азербайджан*|
|*RUS*|***Россия****|
|--------|--------------------|

Код

// ФУНКЦИЯ ВЫВОДИТ МАССИВ Из ПОЛЯ "iso", и ПОЛЯ "country"
function get_country()
{
   //...    
   $query = 'select iso, country
             from countries'; 
   $result = @mysql_query($query);
   //...  
   $result = db_result_to_array($result);
   return $result; 
}

// ФУНКЦИЯ ПРИНИМАЕТ МАССИВ функции get_country() и выводит весь список стран в виде ссылок
function display_country($country_array)
{
  //...
  foreach ($country_array as $row)
  { 
    echo "<a href=\"$row[iso]\">$row[country]</a>\n"; 
  }  

}

//
$country_array = get_country();

display_country($country_array);


######## ЧТО Я ХОЧУ СДЕЛАТЬ ##########

Я хочу сделать так, чтобы если столбец "pay" неравняется 'yes', то тогда выводим Страны например виде текста

Код

function display_country($country_array)
{
  //...
  foreach ($country_array as $row)
  { 
    if ($row[pay]=='yes')
     echo "<a href=\"$row[iso]\">$row[country]</a>\n";
    else
     echo "$row[country]\n";
  }  

}

Если просто объединить все 3 таблицы, то соответсвенно буду выводиться только те города, где "ordrid" не равняется null


########## МОИ СООБРАЖЕНИЯ ###########

У меня есть такая идея:
1) В функции get_country() извлеч данные таким образом где "pay" = YES
$query = "select DISTINCT C.iso, C.country, O.pay
from countries as C, order_details as OD, orders as O
where C.iso = OD.iso and OD.orderid = O.orderid and O.pay = 'Yes'";

2) Сделать функцию get_country_1(), где используя левостороннее объядинение извлеч все остальные данные из тех же столбцов, но там где "pay" = NO и "orderid" имеет пустое значение (is null)
Но я не знаю как объединить 3 таблицы левосторонним объединением, у меня получается объединить только 2 таблицы:
$query = "select DISTINCT countries.iso, countries.country
from countries left join order_details using (iso) where order_details.orderid is null";

3) Объединить массивы этих функций и вывести полученный массив;

//
$country_array = get_country();
$country_array_1 = get_country_1();

$country_array_merge = array_merge($country_array, $country_array1);

display_country($country_array); // В таком случае массив будет содержать значение столбца "pay" и я могу к нему обратиться

--------------------
Если долго мучиться, что-нибудь получитЬся.
PM MAIL WWW   Вверх
Kefir
Дата 15.2.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: нет
Всего: 87



гм... а если просто написать зщапрос так, то в чём проблема?:
Код
SELECT COUNTRIES.iso, COUNTRIES.country, ORDERS.pay FROM ...

Просто так мудрёно написано, что ничего толком не понять (по крайней мере мне...).
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.