Mysql 按联接表的多行对联接查询排序
我有一个Mysql 按联接表的多行对联接查询排序,mysql,sql,left-join,Mysql,Sql,Left Join,我有一个posts表和一个postETA表,其中包含meta_键和meta_值列。我在下面包含了一个简化的表结构(带有一些演示数据) 这些职位需要按评级排序。没有任何评级的帖子也需要被包括在内,因此左连接。没问题: SELECT * FROM posts p LEFT JOIN postmeta m ON p.id = m.post_id AND m.meta_key = 'rating' ORDER BY m.meta_value DESC 但是,对于具有相同评级的帖子,我想根据总票数对它们
posts
表和一个postETA
表,其中包含meta_键
和meta_值
列。我在下面包含了一个简化的表结构(带有一些演示数据)
这些职位需要按评级排序。没有任何评级的帖子也需要被包括在内,因此左连接
。没问题:
SELECT *
FROM posts p
LEFT JOIN postmeta m ON p.id = m.post_id AND m.meta_key = 'rating'
ORDER BY m.meta_value DESC
但是,对于具有相同评级的帖子,我想根据总票数对它们进行进一步排序,总票数存储在
postETA
表的另一行中。在上面的例子中,第一个和第二个职位的评级为80,但由于第二个职位拥有更多的选票,因此应该在第一个职位之前排序。您如何在一个查询中实现这一点?太棒了!我会把那个SQLFiddle站点也添加到书签中,这样会很方便。谢谢令人惊叹的!我会把那个SQLFiddle站点也添加到书签中,这样会很方便。谢谢
SELECT * <-- you'll want to specify columns here
FROM posts p
LEFT JOIN postmeta m ON p.id = m.post_id AND m.meta_key = 'rating'
LEFT JOIN postmeta mv ON p.id = mv.post_id AND mv.meta_key = 'total_votes'
ORDER BY m.meta_value DESC, mv.meta_value DESC
SELECT * <-- you'll want to specify columns here
FROM posts p
LEFT JOIN postmeta m ON p.id = m.post_id AND m.meta_key = 'rating'
LEFT JOIN postmeta mv ON p.id = mv.post_id AND mv.meta_key = 'total_votes'
ORDER BY m.meta_value DESC, mv.meta_value DESC
| ID | TITLE | META_ID | POST_ID | META_KEY | META_VALUE |
----------------------------------------------------------------
| 3 | Third post | 5 | 3 | rating | 95 |
| 2 | Second post | 3 | 2 | rating | 80 |
| 1 | First post | 1 | 1 | rating | 80 |
| 4 | Fourth post | (null) | (null) | (null) | (null) |
SELECT *
FROM posts p
LEFT JOIN postmeta m ON p.id = m.post_id AND m.meta_key = 'rating'
LEFT JOIN postmeta m2 ON p.id = m2.post_id AND m2.meta_key = 'total_votes'
ORDER BY m.meta_value DESC, m2.meta_value Desc