2013-06-25 3 views
-1

Я хочу сделать слияние двух таблиц, а затем сделать ORDER BY, сначала заказать их по столбцу top, чтобы продукты со значением 1 в top отображались сначала в наборе записей.Сортировать по нескольким столбцам из 2 таблиц

После этого, я хочу заказать их по столбцу premium, чтобы продукты со значением 1 пошли сразу после top продукции.

После этого, я хочу остальные продукты по заказу pub_date из таблицы items, а продукты со значением 1 в колонке highlighted не должны быть приведены непосредственно ниже top и premium пунктов.

Поскольку оригинальные столы наполнены ненужной информации, вот зачищенные вниз версии:

Table `items`: 
+-------+------------+--------+ 
| pk_id | pub_date | author | 
+-------+------------+--------+ 
|  1 | 2013-06-11 | John | 
|  2 | 2013-06-12 | Mike | 
|  3 | 2013-06-25 | Seth | 
|  4 | 2013-06-11 | Drew | 
|  5 | 2013-06-13 | Joe | 
+-------+------------+--------+ 

Table `paid_items`: 
+-------+-----+---------+-------------+--------+ 
| fk_id | top | premium | highlighted | active | 
+-------+-----+---------+-------------+--------+ 
|  2 | 1 |  0 |   0 |  1 | 
|  3 | 0 |  0 |   1 |  1 | 
|  4 | 0 |  1 |   0 |  1 | 
|  5 | 0 |  0 |   1 |  1 | 
+-------+-----+---------+-------------+--------+ 

EDIT: Вот псевдо (или любой другой), что я хочу сделать:

PRODUCTS_LIST> 
    PRODUCTS WITH TOP VALUE 
    PRODUCTS WITH PREMIUM VALUE 
    PRODUCTS ORDERED BY PUB_DATE> 
     PRODUCT WITH NO HIGHLIGHTED VALUE 
     PRODUCT WITH NO HIGHLIGHTED VALUE 
     PRODUCT WITH HIGHLIGHTED VALUE 
     PRODUCT WITH NO HIGHLIGHTED VALUE 
     PRODUCT WITH HIGHLIGHTED VALUE 
     ... 

Разбитая версия, как должен выглядеть набор записей, фокусируется на highlighted:

mysql> select pk_id, highlighted from items left join paid_items on items.pk_id 
= paid_items.fk_id order by pub_date desc; 
+-------+-------------+ 
| pk_id | highlighted | 
+-------+-------------+ 
|  3 |   1 | 
|  5 |   1 | 
|  2 |   0 | 
|  1 |  NULL | 
|  4 |   0 | 
+-------+-------------+ 
+0

Итак, вы хотите объединить таблицы 'items' и' paid_items'? – KaeL

+0

Yup. Это фактически полосатая версия из двух больших таблиц, поэтому у вас нет стенограммы текста в вопросе SO. Мне нужно всего лишь заказать «top», «premium» и «pub_date», но не учитывать «подсвеченные» - это всего лишь часть информации, которую я использую позже для печати продукта. Таким образом, он вернет набор записей, содержащий продукты 'top' и' premium', закажите их этими двумя столбцами, а затем возвратите другие товары, заказанные 'pub_date', независимо от того, выделен ли он или нет. – jOpacic

ответ

0

Простой выбор будет: -

SELECT * 
FROM items a 
LEFT OUTER JOIN paid_items b 
ON a.pk_id = b.fk_id 
ORDER BY b.top, b.premium, a.pub_date 

, но я полагаю, вы знаете, что уже.

Однако я не уверен, что вы подразумеваете под изделиями со значением 1 в колонке с подсветкой не должны отображаться непосредственно внизу и премиум-позициям. Вы хотите, чтобы они были исключены или отображены в нижней части списка. Не могли бы вы привести некоторые примеры вывода в свой вопрос?

+0

Измените LEFT OUTER JOIN на INNER JOIN, чтобы исключить записи, где нет соответствующей записи на paid_items – Kickstart

+0

См. Мое редактирование вопроса – jOpacic

+0

Боюсь, я не вижу, как этот порядок соответствует вашим требованиям и образцам данных. Например, вы сначала заказываете по порядку, и единственная запись с вершиной 1 - это запись 2, но эта позиция занимает третье место в вашем списке. – Kickstart