Вывод из двух таблиц с сортировкой по обоим

flower

Новичок
Вывод из двух таблиц с сортировкой по обоим

Есть две таблицы - товары и производители. Нужно вывести товары и производителей с сортировкой тех и тех по алфавиту. Например, сначала все товары в алфавитном порядке производителя на букву "А", затем все товары следующего производителя (на букву "Б") и т.д. При этом ещё иметь возможность использовать какое-нибудь условие к производителю (например, контроллировать какое-то поле в его таблице). Подскажите пример, как это сделать? Структуры таблиц в примере могут быть произвольными, нужна только суть, как сформировать запрос к БД.
 

flower

Новичок
получилась какая-то каша. в таблицах есть поля с одинаковыми названиями (name - название производителя в одной таблице и название товара - во второй).
плюс производителей может быть 1000 записей, а товаров - всего 10, в результате запроса хотелось бы иметь только тех производителей, чьи товары реально присутствуют в результате выполнения запроса.
 

Фанат

oncle terrible
Команда форума
как различать поля с одинаковыми названиями, написано в примере выше
с количеством товаров проблемы нет
 

flower

Новичок
я имею в виду одинаковые поля в результатах выполнения запроса. у производителей и у товаров есть одинаковые поля - id, name.

SELECT * FROM goods,vendors (выборка из двух таблиц)
WHERE goods.cat=1 (принадлежность товара к категории 1)
AND vendors.disable!=1 (производитель не запрещён)
ORDER BY vendors.name (сортировка по названию производителя)

В результатах данного запроса смешиваются vendors.name и goods.name, а ORDER BY vendors.name в запросе не даёт желаемого результата.
 

Фанат

oncle terrible
Команда форума
ну, во-первых, да, в первом примере я забыл
FROM vendors, goods WHERE goods.vendor_id=vendor.id

во-вторых, придется вместо звездочки писать явно -
SELECT v.name as vname, g.name as gname FROM vendors v , goods g

в-третьих, сортировка у меня в примере написана по-другому
 

flower

Новичок
Автор оригинала: *****
во-вторых, придется вместо звездочки писать явно -
SELECT v.name as vname, g.name as gname FROM vendors v , goods g
Спасибо за помощь, работает отлично.

-~{}~ 22.08.10 15:41:

Проблема. Если у товара не задан производитель (vendor_id=0), то такой товар не попадает в выборку.
 

baev

‹°°¬•
Команда форума
flower, а подумать?

WHERE goods.vendor_id=vendor.id OR goods.vendor_id=0
 

flower

Новичок
Автор оригинала: baev
WHERE goods.vendor_id=vendor.id OR goods.vendor_id=0
Так в результате запроса появляются все товары, у которых не задан производитель, несмотря на
WHERE goods.cat=1

С JOIN я ещё не разобрался, если есть пример работы, то могу сделать по аналогии.
 

Фанат

oncle terrible
Команда форума
Лефт джойн, как правильно заметил наш неживой друг :)
плюс товары с вендорами надо поменять местами.
раз нам нужны все товары, но не нужны пустые вендоры.
goods g LEFT JOIN vendors v ON g.vendor_id=v.id

Лефт джойн как раз и выводит все записи из левой таблицы
в отличие от правого, когда он берет из левой только те, которым есть соответствие справа.
ну и товары должны быть, соответственно, слева.
 
Сверху