Показать сообщение отдельно
Astrix вне форума      Старый #4  
Аватара для Astrix
Astrix
Бывалый
Регистрация: 09.01.2007
Сообщения: 309


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Astrix Посетить домашнюю страницу Astrix Найти все сообщения от Astrix Добавить Astrix в список друзей  
06.06.2007, 19:44

Цитата: Сообщение от linky
Вау, спасибо, Astrix! Сегодня постараюсь проверить этот способ, надеюсь получится

Не, знаете, я по-разному попробовал, но не получилось того что мне нужно. Я честно говоря немного запутался. Не могли бы Вы немного мне разжевать Ваш запрос? Мне если четсно, нужно только id товара выделить, что-то типа такого:

SELECT i.id, b.title AS brandname FROM items AS i LEFT JOIN brands AS b ON (i.category = '1' AND i.brand = b.id) ORDER BY b.title, i.title

только чтобы работало)

и я не понял зачем нужно значение brandname, это для mysql_fetch_row, верно?



Так, ну насчет разжевать.... постараюсь :). Этот запрос выбирает все записи из таблицы items, у которых category = '1', и для каждой по идентификатору выбирает бренд i.brand = b.id.

ON (i.category = '1' AND i.brand = b.id) - это в принципе одно и то же, что и если написать WHERE i.category = '1' AND i.brand = b.id
и.... правильнее было бы сделать так:

SELECT i.id, b.title AS brandname FROM items AS i LEFT JOIN brands AS b ON (i.brand = b.id) WHERE i.category = '1' ORDER BY b.title, i.title

i и b - это, так сказать, псевдонимы таблиц items и brands соответственно. Они нужны из-за того что в этих таблицах есть одинаковые поля - id и title и обратиться к ним только по названию нельзя. хотя можно было вместо псевдонимов использовать и полные названия таблиц, но это не рационально, имхо.

к примеру, i.id - это поле id таблицы items, а b.id - поле id таблицы brands
b.title AS brandname - здесь я обозвал поле title таблицы brands как brandname, т. к. такое поле (title) уже есть в items.
а раз вам нужен только id, то нет смысла переименовывать поле и можно упростить еще немного завпрос:

SELECT i.id, b.title FROM items AS i LEFT JOIN brands AS b ON (i.brand = b.id) WHERE i.category = '1' ORDER BY b.title, i.title

ну, с ORDER BY b.title, i.title, думаю все понятно? тут идет сортировка сначала по заголовкам брендов, а потом по заголовкам продуктов (ну, или что там у вас)

и да. все названия после SELECT используются после вызова mysql_fetch_row как идентификаторы элементов получившегося массива

то есть в вашем случае это будут id продукта и title бренда
 
Хочешь обнять весь мир? - Купи глобус!