|
Помогите с сортировкой
|
|||
---|---|---|---|
#18+
Нужно сделать выборку из одной таблицы значения которой отсортированны по некоторым полям этой таблицы и некоторым полям другой таблицы. Подробнее: есть веб магазин, в MySQL имеется таблица с товарами(product) и имеется таблица со свойствами этих товаров(product_attribute_value). Отношения между этими таблицами установлены как один-к-многим по product_id. Таблица свойств товаров(product_attribute_value) имеет следующую организацию product_id, attribute_name, attribute_value Помогите написать SQL запрос поскольку в SQL не силен. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2003, 14:51 |
|
Помогите с сортировкой
|
|||
---|---|---|---|
#18+
Я так понял тебе надо отсортировать по аттрибутам во второй таблице!? Это не так-то просто и одним запросом на MySQL думаю не решить! Могу предложить такой вариант! На чем вообще программируем? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2003, 15:20 |
|
Помогите с сортировкой
|
|||
---|---|---|---|
#18+
>>Я так понял тебе надо отсортировать по аттрибутам во второй таблице!? Да Вы абсолютно правельно меня поняли >>На чем вообще программируем? на 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="ГЛУБИНА" на момент сортировки мне неизвестны названия аттрибутов, я просто хочу отсортировать по ихнем значениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2003, 16:39 |
|
Помогите с сортировкой
|
|||
---|---|---|---|
#18+
Чего я не понял в запросе: 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.
Получаем список отсортированный по товарам, затем по аттрибуту. Теперь при выводе сортировать через PHP. Но Вариант с созданием списка атрибутов мне нравится больше! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2003, 17:14 |
|
Помогите с сортировкой
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2003, 17:27 |
|
Помогите с сортировкой
|
|||
---|---|---|---|
#18+
тогда надо делать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2003, 17:33 |
|
Помогите с сортировкой
|
|||
---|---|---|---|
#18+
В итоге попробовал вот такой запрос: 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 Еренда получается, может быть пересмотреть организацию таблиц, что нибудь посоветуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2003, 18:38 |
|
|
start [/forum/topic.php?fid=47&fpage=712&tid=1856203]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
23ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 222ms |
0 / 0 |