Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按联接表的多行对联接查询排序_Mysql_Sql_Left Join - Fatal编程技术网

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