Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос выборки SQL со сложной сортировкой / 10 сообщений из 10, страница 1 из 1
20.03.2018, 23:05
    #39617870
Knah
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос выборки SQL со сложной сортировкой
Помогите составить запрос выборки 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
21.03.2018, 08:01
    #39617922
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос выборки SQL со сложной сортировкой
Knah нужно ID в следующем порядке и без дублей: 2, 303, 304, 1, 4, 3 ПОДРОБНО (!!!) - как, по каким признакам, из показанной выборки должен получится показанный результат.
...
Рейтинг: 0 / 0
21.03.2018, 10:11
    #39617988
Knah
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос выборки SQL со сложной сортировкой
Akina,

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


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

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

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



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

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

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

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

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

Код: sql
1.
ORDER BY GROUP_CONCAT(LPAD(attributevalue_order,11,0) ORDER BY attribute_order ASC)
...
Рейтинг: 0 / 0
21.03.2018, 10:30
    #39618004
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос выборки SQL со сложной сортировкой
Ну или совсем чтобы
Код: 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
21.03.2018, 14:47
    #39618260
Knah
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос выборки SQL со сложной сортировкой
Akina,

Akina,

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

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



В общем-то всё понятно, за исключением id 303, почему в случае LPAD и без него результат разный?
...
Рейтинг: 0 / 0
21.03.2018, 15:25
    #39618304
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос выборки SQL со сложной сортировкой
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
21.03.2018, 15:42
    #39618324
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос выборки SQL со сложной сортировкой
Knahпочему в случае LPAD и без него результат разный?
Значения без LPAD сортируются как числа. А с применением LPAD - как строки с учётом ведущих нулей.
...
Рейтинг: 0 / 0
21.03.2018, 15:43
    #39618326
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос выборки SQL со сложной сортировкой
Значения без LPAD сортируются как числа? если тип данных числовой, и как строки разной длины, если тип данных строковый. А с применением LPAD - как строки равной длины, с учётом ведущих нулей.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос выборки SQL со сложной сортировкой / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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