第一个表:员额
ID post unix_timestamp upvotes
-----------------------------------
118 mmmm 1360662045 4
119 kdkdk 1360662074 2
120 dkcjf 1360662012 3
121 dkcmv 1360662025 1
以及其他领域
第二张表:post_标签
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
也根据搜索查询(可以包含散列标记或纯文本,也可以同时包含两者)按upvots降序排序。因此,如果用户搜索
#test #iseeyou united states
,它应该返回既包含标签又包含按时间戳和upvots排序的文本united states的帖子。另外,我希望有更高支持率的职位优先于最新的职位。
请告知我的问题是否正确?
最佳答案
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
SQLFiddle Demo
关于mysql - 从两个表中选择多个where条件和多个order子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15516975/