2013-06-25 62 views
-1

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

之后,我想通过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 | 
+-------+-------------+ 
+0

所以你想合并'items'和'paid_items'表吗? – KaeL

+0

是的。这实际上是2个大表格的条纹版本,所以你在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,以排除付费项目上没有匹配记录的记录 – Kickstart

+0

请查看我编辑的问题 – jOpacic

+0

害怕我无法看到该订单与您的要求和样本数据的匹配情况。例如,您说先按顶部排序,顶部1的唯一记录是记录2,然后在您的列表中排名第三。 – Kickstart