powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос выборки SQL со сложной сортировкой
10 сообщений из 10, страница 1 из 1
Помогите составить запрос выборки SQL со сложной сортировкой
    #39617870
Knah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите составить запрос выборки SQL со сложной сортировкой

Вот описание таблиц (моделей):
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class SKU():
    pass

class EntitySKU():
    sku = ForeignKey(SKU)
    attribute = ForeignKey(Attribute)
    attributevalue = ForeignKey(AttributeValue)

class AttributeValue():
    value = CharField("Значение")
    my_order = IntegerField(default=0)

class Attribute():
    title = models.CharField("Название", max_length=255)
    my_order = IntegerField(default=0)



Нужно получить SKU, отсортированные по Attribute.my_order и AttributeValue.my_order, но каскадом (согласно приоритету).

Вот пример запроса обычного:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT `product_sku`.`id`, `product_attribute`.`title`, `product_attributevalue`.`value`,
`product_attribute`.`my_order` AS attribute_order,
`product_attributevalue`.`my_order` AS attributevalue_order
FROM `product_sku` 
LEFT OUTER JOIN `product__entity_sku` ON (`product_sku`.`id` = `product__entity_sku`.`sku_id`) 
LEFT OUTER JOIN `product_attribute` ON (`product__entity_sku`.`attribute_id` = `product_attribute`.`id`) 
LEFT OUTER JOIN `product_attributevalue` ON (`product__entity_sku`.`value_id` = `product_attributevalue`.`id`) 
WHERE `product_sku`.`product_id` = 1 
ORDER BY `product_attribute`.`my_order` ASC, `product_attributevalue`.`my_order` ASC



И вот его результат:



А нужно ID в следующем порядке и без дублей: 2, 303, 304, 1, 4, 3

То есть:

Белый XXS, Белый XS, Белый S, ... Чёрный XXS, Чёрный XS, ... Красный S, Красный M, ...

Заранее спасибо ) Очень нужно ))
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39617922
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Knah нужно ID в следующем порядке и без дублей: 2, 303, 304, 1, 4, 3 ПОДРОБНО (!!!) - как, по каким признакам, из показанной выборки должен получится показанный результат.
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39617988
Knah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Один хороший человек показал возможное решение


Но оно не оптимально, так как в POW легко может возникнуть ошибка из-за отрицательного числа.

По поводу правила, то оно простое, но вот на словах объяснить сложновато, возможно скриншот выше прояснит ситуацию.

Либо можно составить табличку



Есть сортировка у attribute (my_order) порядок такой:
Цвет, Размер

У цвета сортировка значений такая:
Чёрный, Белый Красный

У размеров:
XXS XS S M L XL

Соответственно, я хочу получать SKU в таком порядке:
Чёрный XXS, Чёрный XS, Чёрны S, Чёрный M .... Белый XXS, Белый XS Белый S .... Красный ....

Но атрибуты динамические (EAV паттерн), потому решение должно быть гибкое
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39618001
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ааа... так говно вопрос...

Код: sql
1.
ORDER BY GROUP_CONCAT(LPAD(attributevalue_order,11,0) ORDER BY attribute_order ASC)
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39618004
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или совсем чтобы
Код: sql
1.
ORDER BY GROUP_CONCAT(LPAD(attributevalue_order,(SELECT CHAR_LENGTH(MAX(attributevalue_order)) FROM table),0) ORDER BY attribute_order ASC)
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39618260
Knah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Akina,

То что нужно, сработало!
Большое спасибо, сам бы никогда не додумался до такого :))
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39618303
Knah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Если не сложно, можете только прояснть принцип работы:



В общем-то всё понятно, за исключением id 303, почему в случае LPAD и без него результат разный?
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39618304
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Knah,

авторА нужно ID в следующем порядке и без дублей: 2, 303, 304, 1, 4, 3

Код: sql
1.
order by case ID when 2 then 1 when 303 then 2 when 304 then 3 when 1 then 4 when 4 then 5 when 3 then 6 else ID + 1000 end
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39618324
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Knahпочему в случае LPAD и без него результат разный?
Значения без LPAD сортируются как числа. А с применением LPAD - как строки с учётом ведущих нулей.
...
Рейтинг: 0 / 0
Помогите составить запрос выборки SQL со сложной сортировкой
    #39618326
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значения без LPAD сортируются как числа? если тип данных числовой, и как строки разной длины, если тип данных строковый. А с применением LPAD - как строки равной длины, с учётом ведущих нулей.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос выборки SQL со сложной сортировкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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