LEFT JOIN

Name

Новичок
LEFT JOIN

Есть таблицы
firm
| id | firm |
product
| id | group_id | podgroup_id | firm_id | name |

Помогите вытащить вот так.
Насколько я понимаю нужен LEFT JOIN, что то не выходит
| Подгрупы принадлежащие одной группе (group_id) |
| только фирмы принадлежащие определенной подгрупе |

Типа того
| Мониторы 15 | CTX |
| Мониторы 15 | Samsung |
| Мониторы 15 | Sony |
| Мониторы 17 | NULL |
| Мониторы 19 | NULL |
 

Name

Новичок
Делаю так, не катит. Для всех выбирается один производитель, первый в таблице.

SELECT p.name, f.name FROM product p
LEFT JOIN firm f ON p.pg_id = 28
WHERE p.group_id = 2
GROUP BY p.id
 

su1d

Старожил PHPClubа
SELECT p.name, f.name
FROM product p
LEFT JOIN firm f USING(id)
WHERE p.group_id = 2
GROUP BY p.id
ORDER BY p.name

USING(id) - эквивалентно - ON f.id = p.id
 

Name

Новичок
[]su1d[/]
Не прокатывает. Фирмы путает.
У меня здесь LEFT JOIN firm f ON p.pg_id = подгруппа для какой надо выбрать фирмы.
 

tony2001

TeaM PHPClub
Name:
очень подробное описание проблемы...
с проявлением благодарности....
 

Novice

Guest
2Name
Разберись что именно и как делает JOIN и может вопрос отпадет сам собой...
 

Name

Новичок
Novice, а ты разобрался.
Так можно мне сделать такую выборку или это невозможно.
 

Novice

Guest
Я имел ввиду не конкретно этот пример, а вообще в принципе ЧТО ДЕЛАЕТ JOIN. А что именно ты хочешь получить я не разобрался. Могу лишь повториться:
SELECT p.name, f.name FROM product AS p
LEFT JOIN firm AS f ON p.firm_id = f.id
WHERE p.group_id = 2
GROUP BY p.podgroup_id
ORDER BY p.name
 

Name

Новичок
Да не то это не то. Твой запрос выбирает все.
Господа гуру и все таки возможно такое сделать или нет.
 

Name

Новичок
Подробнее:
В каталоге товаров пользователь выбирает
Мониторы > 15 Мониторы
Есть фильтр по производителям
так вот надо чтоб показывались только те фирмы у которых есть 15 мониторы.

Как че можно посмотреть здесь
http://www.avtomurman.ru/ics/product.htm?q=2&pg=27
 

RomikChef

Guest
гы.
ты про оператор WHERE слышал когда-нибудь?
select p.*,firm from product p,firm f WHERE group_id='monitor' AND podgroup_id=15 AND firm_id='$filter'

И все.
Проще надо быть
 

Name

Новичок
Ты не поверишь, но про WHERE я слышал.
Не все так просто.
Все дело в том что это все делает один запрос (по замыслу).
То есть в левый столбец выбираються все подгрупы мониторов,
а в правый (если пользователь кликнул по какойто подгрупе,
только фирмы этой подгрупы).
То что можно разными запросами или еще как изгольнуться это понятно. Я спрашивал именно про запрос.
| Мониторы 15 | CTX |
| Мониторы 15 | Samsung |
| Мониторы 15 | Sony |
| Мониторы 17 | NULL |
| Мониторы 19 | NULL |
 

RomikChef

Guest
Наме.
под словом "подробнее" ты описал некую задачу.
я тебе эту задачу решил.
теперь ты заявляешь, что тебе надо "все это".
Во-первых, надо сразу писать, что тебе надо, а в-вторых, долго эта игра в кошки-мышки продолжаться будет?

Я так понимаю, что как сделать, ты знаешь. но хочешь одним запросом.
не надо тебе один запос.
сделай два и успокойся. Здесь джойны не нужны. Оставь их для действительно необходимого случая, и не тереби попусту.
 

Name

Новичок
Какие кошки-мышки.
В самом первом poste написал что хочу.
 

RomikChef

Guest
Тони, наша слава телепатов нас погубит.
Скоро будут писать просто - "Вопрос!", а потом удивленно объяснять - "так я же все написал!"
 

mahoune

Guest
firm
| id | firm |
product
| id | group_id | podgroup_id | firm_id | name |

Name, мне кажется здесь нехватает таблицы
groups
| id | parentgroup_id | name |

Тогда получаем
SELECT gr.name, sgr.name FROM
groups gr, groups sgr, firm fm, product pr
WHERE
sgr.parentgroup_id=gr.id
AND
(pr.group_id=gr.id OR pr.podgroup_id=sgr.id)
AND
fm.id = pr.firm_id

И вообще ответь, где у тебя группы хранятся! Сложно так иметь на руках 50% исходных данных!
 

tony2001

TeaM PHPClub
Ромик, пора объявление давать:
требуется телепат на форум.
куда обращаться - сами знаете.
 
Сверху