-1

我想合并 2 个表,然后ORDER BY首先按top列对它们进行排序,以便值 1 的产品top首先出现在记录集中。

之后,我想按premium列对它们进行排序,以便价值为 1 的top产品紧随其后。

之后,我希望其余的产品pub_date从表中订购items,列中值为 1 的产品highlighted不应直接显示在下面toppremium项目中。

由于原始表格充满了不必要的信息,因此这里是精简版:

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 |
+-------+-----+---------+-------------+--------+

编辑:这是我想要完成的伪(或其他):

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 |
+-------+-------------+
4

1 回答 1

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 的产品不应直接显示在顶部和高级项目下方。您希望将这些排除在外,还是显示在列表的底部。你能在你的问题中放一些示例输出吗?

于 2013-06-25T10:26:13.340 回答