2010-09-21 4 views
2

У меня есть таблица MySQL с 2-мя полями:MySQL сортировать по 2 параметрам

(значение по умолчанию pd_sort = 0) pd_code и pd_sort. Для каждого продукта можно указать индекс заказа (в pd_sort) -1000, -900 и т. Д.

Итак, когда я печатаю продукты на PHP, я хотел бы отсортировать их так.

продукт1 (pd_sort = -100), product2 (pd_sort = -90) и т. Д., А затем остальные продукты (где pd_sort = 0), отсортированные по pd_code.

ORDER BY pd_sort, pd_code работает только для 2 продуктов.

Любые предложения?

Chris

+1

Небольшой набор выборочных данных будет очень полезен для ответа на этот вопрос, в идеале в форме операторов 'insert', в небольшую таблицу (например, только с колонками' pd_code', 'pd_sort' и третью подобная этикетке вещь). –

ответ

3

Если я понимаю правильно, вы должны попробовать что-то вроде этого:

SELECT * FROM table 
WHERE pd_sort <> 0 
ORDER BY pd_sort 

UNION 

SELECT * FROM table 
WHERE pd_sort = 0 
ORDER BY pd_code 
+0

Да, я думаю, это будет правильно, спасибо! – Chris

0

Союз, как jab suggested должен быть довольно эффективным, даже если это приведет к двум запросам, а не один.

Если вы не хотите, чтобы сделать союз по какой-либо причине, другой подход, чтобы иметь select генерировать столбец, манипулируя значениями pd_code и pd_sort и сортировки по этому столбцу. Вы не предоставили нам образцы данных для работы (ну, кроме пары значений pd_sort), но в большинстве случаев можно манипулировать данными, так что вы получаете сортируемое значение, как правило, просто делая конкаты или числовые выражения. Но в самых сложных случаях вы можете отказаться от заявлений case.

+0

Мне также кажется, что Даниэль Вассалло был на что-то, прежде чем он удалил свой ответ. Возможно, фактический пример, который он дал, не совсем соответствует вашей ситуации, но концепция - использование выражений в 'order by' - была звуковой (и фактически подобной выше). –

Смежные вопросы