powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с сортировкой
7 сообщений из 7, страница 1 из 1
Помогите с сортировкой
    #32088851
Andrey Chesnokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно сделать выборку из одной таблицы значения которой отсортированны по некоторым полям этой таблицы и некоторым полям другой таблицы.
Подробнее:
есть веб магазин, в MySQL имеется таблица с товарами(product) и имеется таблица со свойствами этих товаров(product_attribute_value).
Отношения между этими таблицами установлены как один-к-многим по product_id.
Таблица свойств товаров(product_attribute_value) имеет следующую организацию product_id, attribute_name, attribute_value
Помогите написать SQL запрос поскольку в SQL не силен.
...
Рейтинг: 0 / 0
Помогите с сортировкой
    #32088893
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял тебе надо отсортировать по аттрибутам во второй таблице!?
Это не так-то просто и одним запросом на MySQL думаю не решить! Могу предложить такой вариант!
На чем вообще программируем?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT a.product_id, a.pruduct_name
FROM product a, product_attribute_value av1, product_attribute_value av2, product_attribute_value av3
WHERE
av1.product_id=a.product_id
AND
av2.product_id=a.product_id
AND
av3.product_id=a.product_id
AND
av1.attribute_name= "ШИРИНА" 
AND
av2.attribute_name= "ВЫСОТА" 
AND
av3.attribute_name= "ГЛУБИНА" 
ORDER BY av2.attribute_value, av1.attribute_value
 -- Отсортируем по ВЫСОТЕ а затем по ШИРИНЕ
 
...
Рейтинг: 0 / 0
Помогите с сортировкой
    #32088973
Andrey Chesnokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Я так понял тебе надо отсортировать по аттрибутам во второй таблице!?
Да Вы абсолютно правельно меня поняли

>>На чем вообще программируем?
на PHP4

Я посмотрел предложенный Вами запрос и у меня создолось впечетление что либо я очень плохо знаю SQL, либо я плохо сформулировал данные задачи.
Давайте я попробую повторится, более подробно описав структуру своей базы:
Таблица product(product_id, product_name, product_description,....);
Таблица product_attribute_value(product_id, attribute_name, attribute_value);
В attribute_name хранится название атрибута, например "ширина" или "цвет" или "диаметр" и т.д.
В attribute_value хранятся значения атрибута.
У одного продукта может быть несколько аттрибутов, может не быть их вовсе.

Чего я не понял в запросе:
1.FROM product a, product_attribute_value av1, product_attribute_value av2,
Что значит av1, av2 почему они с пробелом?
2.av1.attribute_name="ШИРИНА"
AND
av2.attribute_name="ВЫСОТА"
AND
av3.attribute_name="ГЛУБИНА"
на момент сортировки мне неизвестны названия аттрибутов, я просто хочу отсортировать по ихнем значениям.
...
Рейтинг: 0 / 0
Помогите с сортировкой
    #32089009
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего я не понял в запросе:
1.FROM product a, product_attribute_value av1, product_attribute_value av2,
Что значит av1, av2 почему они с пробелом?

a, av1, av2, av3 - это алиасы для таблиц, что-б не писать их полность раз, и что-б можно было одну и ту-же таблицу (product_attribute_value) несколько раз в один запрос приаттачивать, как буд-то это три разных таблицы, а потом к ее полям обращаться!

2.av1.attribute_name="ШИРИНА"
AND
av2.attribute_name="ВЫСОТА"
AND
av3.attribute_name="ГЛУБИНА"
на момент сортировки мне неизвестны названия аттрибутов, я просто хочу отсортировать по ихнем значениям.


мне неизвестны названия аттрибутов
Вот в этом сама проблема и состоит!!! Для этого в PHP надо предварительно сгенерировать полный список параметров для объектов (товаров) текущей выборки! Потом с учетом этого создать SQL скрипт. В котором каждое новое добавление таблицы product_attribute_value есть ни что иное как добавление еще одного аттрибута.
В FROM надо добавить
product_attribute_value av_n
и соответственно в WHERE надо добавить для каждого атрибута
AND
av_n.attribute_name="ВЫСОТА"
AND
av_n.product_id=a.product_id

Но учти, при большом количестве аттрибутов это будет долго!

Вариант второй:
Берем этот запрос
Код: plaintext
1.
2.
3.
4.
5.
SELECT a.product_id, av.attribute_name, av.attribute_value
FROM product a, product_attribute_value av
WHERE
av.product_id=a.product_id
ORDER BY a.product_id, av.attribute_name

Получаем список отсортированный по товарам, затем по аттрибуту.
Теперь при выводе сортировать через PHP.

Но Вариант с созданием списка атрибутов мне нравится больше!
...
Рейтинг: 0 / 0
Помогите с сортировкой
    #32089018
Andrey Chesnokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WHERE
av1.product_id=a.product_id
AND
av2.product_id=a.product_id
AND
av3.product_id=a.product_id

если продукт не содержит аттрибутов он не попадет в эту выборку поскольку
av1.product_id=a.product_id = FALSE
...
Рейтинг: 0 / 0
Помогите с сортировкой
    #32089024
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда надо делать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT a.product_id, a.pruduct_name
FROM product a
LEFT JOIN product_attribute_value av1 ON av1.product_id=a.product_id
LEFT JOIN product_attribute_value av2 ON av2.product_id=a.product_id
LEFT JOIN product_attribute_value av3 ON av3.product_id=a.product_id
WHERE
av1.attribute_name= "ШИРИНА" 
AND
av2.attribute_name= "ВЫСОТА" 
AND
av3.attribute_name= "ГЛУБИНА" 
ORDER BY av2.attribute_value, av1.attribute_value
-- Отсортируем по ВЫСОТЕ а затем по ШИРИНЕ
...
Рейтинг: 0 / 0
Помогите с сортировкой
    #32089059
Andrey Chesnokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге попробовал вот такой запрос:

SELECT DISTINCT a.*
FROM product a , product_category_xref
LEFT JOIN product_attribute_value av1 ON av1.product_id=a.product_id
WHERE
product_category_xref.category_id='afe31e35543d2f2131e4049b53791cf2'
AND
product_category_xref.product_id=a.product_id
ORDER BY a.product_name, av1.attribute_value

Еренда получается, может быть пересмотреть организацию таблиц, что нибудь посоветуете?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с сортировкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]