Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: left join как сделать двойное условие

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: left join как сделать двойное условие
3d_killer
Отправлено: 26 Декабря, 2013 - 16:51:50
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




есть запрос к примеру:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3. table_product.id,
  4. temp.name,
  5. temp.model,
  6. table_product_color.name AS color
  7. FROM table_product
  8.                 LEFT JOIN table_product AS temp ON
  9.                 temp.id=table_product.parent
  10.                 LEFT JOIN table_product_color ON
  11.                 table_product.color=table_product_color.id
  12.                 WHERE table_product.parent=716
  13.  

в нем мне нужно выбрать данные еще из одной таблицы но дело в том, что условие у выборки еще из одной таблицы двойное а как такое написать не знаю и примерова не найду
то есть например тут
CODE (SQL):
скопировать код в буфер обмена
  1. LEFT JOIN table_product AS temp ON
  2. temp.id=table_product.parent
как добавить типо
CODE (SQL):
скопировать код в буфер обмена
  1. AND temp.id=table_product.id
?
(Добавление)
получилось
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3. table_product.id,
  4. temp.name,
  5. temp.model,
  6. table_group_property.value,
  7. table_property.name AS property,
  8. table_product_color.name AS color
  9. FROM table_product
  10.                 LEFT JOIN table_product AS temp ON
  11.                 temp.id=table_product.parent
  12.                 LEFT JOIN table_product_color ON
  13.                 table_product.color=table_product_color.id
  14.                 LEFT JOIN table_product_property_value ON
  15.                 table_product_property_value.id_product=table_product.id
  16.                 LEFT JOIN table_property ON
  17.                 table_product_property_value.id_param=table_property.id
  18.                 LEFT JOIN table_group_property ON
  19.                 table_group_property.id=table_product_property_value.value
  20.                 WHERE table_product.parent=1
  21.  

вот думаю не многовато left join? выдает то что нужно
 
My status
 Top
3d_killer
Отправлено: 26 Декабря, 2013 - 17:23:29
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




как теперь разложить данный массив правильно, не могу понять
(Добавление)
не получилось не то что я хотел
(Добавление)
помогите что не правильно написано?
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3. table_product.id,
  4. temp.name,
  5. temp.model,
  6. table_product_color.name AS color
  7. FROM table_product
  8.                 LEFT JOIN table_product AS temp ON
  9.                 temp.id=table_product.parent
  10.                 LEFT JOIN table_product_color ON
  11.                 table_product.color=table_product_color.id
  12.                 LEFT JOIN table_product_property_value ON
  13.                 table_product_property_value.id_product=table_product.id
  14.                 LEFT JOIN
  15.                 (SELECT id_param FROM table_product_property_value) ON
  16.                 table_product_property_value.id_product=table_product.id
  17.                 WHERE table_product.parent=1
  18.  

ошибка где то тут
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. LEFT JOIN
  3.                 (SELECT id_param FROM table_product_property_value) ON
  4.                 table_product_property_value.id_product=table_product.id
  5.  

Прикреплено изображение (Нажмите для увеличения)
Без-имени-3.jpg
 
My status
 Top
kotyara1979
Отправлено: 26 Декабря, 2013 - 18:46:04
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




а в чем ошибка?
насколько могу судить запрос отработал правильно.

собственно вопрос звучит так, а чего вы хотели?


-----
Сделать можно все. Главное одеть каску.
 
 Top
3d_killer
Отправлено: 26 Декабря, 2013 - 18:47:25
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




вобщем хочу но не знаю как это сделать и потом разложить
нужен двухмерный массив
с товарами а второй уровень это свойства, есть примеры таких запросов?
 
My status
 Top
kotyara1979
Отправлено: 26 Декабря, 2013 - 18:52:24
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




3d_killer пишет:
вобщем хочу но не знаю как это сделать и потом разложить
нужен двухмерный массив
с товарами а второй уровень это свойства, есть примеры таких запросов?


Результат выполнения запроса это таблица данных. Считывается построчно. Каждая строка это "одномерный" массив. Это если "на пальцах".

Что вам мешает вести контроль по "id" продукта и обработать несколько строк результата как одну запись "двухмерного" массива?

(Отредактировано автором: 26 Декабря, 2013 - 18:54:06)



-----
Сделать можно все. Главное одеть каску.
 
 Top
3d_killer
Отправлено: 26 Декабря, 2013 - 18:56:47
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




вот я привел скрин результата запроса, вроде бы верно но как его правильно вывести я не пойму что бы не было дублей записи, то есть в данном случае 2 записи выборки соответствуют одному продукту с двумя свойствами, если не трудно напишите как правильно его разложить?
(Добавление)
с учетом что свойств может быть больше
 
My status
 Top
kotyara1979
Отправлено: 26 Декабря, 2013 - 19:12:07
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




PHP:
скопировать код в буфер обмена
  1. $rez=mysql_query();
  2.  
  3. $prev_id=0;
  4. while($row=mysql_fetch_assoc($rez))
  5. {
  6.         if($prev_id<>$row['id'])
  7.         {} // начинаем обработку новой записи продукта
  8.         else
  9.         {} // продолжаем обработку прежней записи продукта
  10.         $prev_id = $row['id'];
  11. }


и неважно сколько строк у вас отвечает за один продукт.

(Отредактировано автором: 26 Декабря, 2013 - 19:13:33)



-----
Сделать можно все. Главное одеть каску.
 
 Top
3d_killer
Отправлено: 26 Декабря, 2013 - 19:16:54
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




ага понял, благодарю
 
My status
 Top
3d_killer
Отправлено: 26 Декабря, 2013 - 19:18:33
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




наброски
Прикреплено изображение (Нажмите для увеличения)
Без-имени-4.jpg
 
My status
 Top
teddy
Отправлено: 26 Декабря, 2013 - 19:27:15
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Сделайте группировку результата запроса по названию продукта

temp - имя таблицы, откуда берется название товара.

(Отредактировано автором: 26 Декабря, 2013 - 19:30:06)

 
 Top
kotyara1979
Отправлено: 26 Декабря, 2013 - 19:29:09
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




teddy пишет:
Сделайте группировку результата запроса по названию продукта



Очень интересно зачем? какой собственно лучший результат вы думаете получить?

(Отредактировано автором: 26 Декабря, 2013 - 19:29:44)



-----
Сделать можно все. Главное одеть каску.
 
 Top
3d_killer
Отправлено: 26 Декабря, 2013 - 19:43:43
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




не группировка тут не нужна, если я сделаю группировку то вытащу только одно свойство
 
My status
 Top
DelphinPRO
Отправлено: 26 Декабря, 2013 - 20:06:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




по-моему из БД можно только линейный массив (набор записей) вытащить.

(Отредактировано автором: 26 Декабря, 2013 - 20:06:57)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 26 Декабря, 2013 - 20:44:08
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




либо вытащить все одним куском а потом бегать по массиву на клиенте и группировать вручную

либо самое разумное - получить список продуктов а потом для каждого
продукта его свойства


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB