Гриша К.
Новичок
Объединение 3 таблиц Mysql. Вывод массива результата объединения, при опред. условии.
Здравствуйте.
# У меня есть задача, которую я не могу выполнить, я описываю ее ниже "## ЧТО Я ХОЧУ СДЕЛАТЬ ##".
# У меня есть одна идея "# МОИ СООБРАЖЕНИЯ #", но для этого мне нужно объединить 3 таблицы левосторонним объединением, чего я немогу сделать. И в общем-то если я смогу это сделать, возможно задача будет решена.
# И возможно посмотрев приведенные таблицы и прочитав интересующие меня условия вывода данных, вы сможете предложить простое решение, так как у меня знаний немного в PHP, и возможно я просто невижу простого решения.
######## ЧТО Я ХОЧУ СДЕЛАТЬ ##########
Я хочу сделать так, чтобы если столбец "pay" неравняется 'yes', то тогда выводим Страны например виде текста
Если просто объединить все 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 =
rderid 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" и я могу к нему обратиться
Здравствуйте.
# У меня есть задача, которую я не могу выполнить, я описываю ее ниже "## ЧТО Я ХОЧУ СДЕЛАТЬ ##".
# У меня есть одна идея "# МОИ СООБРАЖЕНИЯ #", но для этого мне нужно объединить 3 таблицы левосторонним объединением, чего я немогу сделать. И в общем-то если я смогу это сделать, возможно задача будет решена.
# И возможно посмотрев приведенные таблицы и прочитав интересующие меня условия вывода данных, вы сможете предложить простое решение, так как у меня знаний немного в PHP, и возможно я просто невижу простого решения.
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 | 11 | 2.jpg | none |
| 3 | 3 | RUS | 12 | 3.jpg | none |
| 4 | 4 | AUT | 14 | 4.jpg | none |
|---------|-------------|------------|--------|----------|-----------|
COUNTRIES
|------------|--------------|
| iso | country |
|------------|--------------|
| AUS | Австралия |
| AUT | Австрия |
| AZE | Азербайджан |
| RUS | Россия |
|------------|--------------|
PHP:
// ФУНКЦИЯ ВЫВОДИТ МАССИВ Из ПОЛЯ "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', то тогда выводим Страны например виде текста
PHP:
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";
}
}
########## МОИ СООБРАЖЕНИЯ ###########
У меня есть такая идея:
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 =
rderid 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" и я могу к нему обратиться
PHP: