选择多个where条件和两个表中的多个order子句

时间:2013-03-20 06:44:17

标签: mysql sql sql-order-by where-clause

第一张表:帖子

ID   post    unix_timestamp  upvotes 
-----------------------------------
118  mmmm    1360662045       4 
119  kdkdk   1360662074       2
120  dkcjf   1360662012       3
121  dkcmv   1360662025       1

和其他一些领域

第二个表:post_tags

ID   post_id   tagname  
-----------------------
1    118        #test
2    118        #iseeyou
3    119        #sleepy

我跑的MYSQL查询。

SELECT p.id, p.post, p.timestampfull FROM posts p,
post_tags pt WHERE pt.tagname IN ('#test','#iseeyou')
AND p.post LIKE  '%united states%'
AND p.id = pt.post_id
GROUP BY p.id
HAVING COUNT( pt.tagname ) = 2
ORDER BY p.upvotes DESC , p.unix_timestamp DESC 

在我的搜索应用程序中,我正在尝试获取最新的行,这也是为什么p.unix_timestamp也按照升序排序的原因,基于搜索查询,可以包含哈希标记或纯文本或两者。

因此,如果用户搜索#test #iseeyou united states,它应该返回包含两个标签的帖子以及按时间戳和upvotes排序的文本美国。

另外,我希望有更高upvotes的帖子优先于最新的帖子。

请告知我的查询是否正确?

1 个答案:

答案 0 :(得分:1)

SELECT  p.*
FROM    posts p
        INNER JOIN
        (
            SELECT  a.ID
            FROM    posts a
                    INNER JOIN post_tags b
                        ON a.ID = b.post_ID
            WHERE   a.post LIKE '%mmmm%' AND
                    b.tagname IN ('#test','#iseeyou')
            GROUP   BY ID
            HAVING  COUNT(DISTINCT b.tagname) = 2
        ) sub ON p.ID = sub.ID
ORDER   BY p.upvotes DESC, p.unix_timestamp DESC