php - MySQL JOIN 和 MAX

标签 php mysql join max

您好,我有一个查询,它通过显示首先评级的评论然后显示尚未评级的评论来执行我想要的操作。但是我似乎无法正确订购它。

结果应该是这样的:

5
4
0
0
...

目前它是这样做的:

4
5
0
0
...

这是我的问题

$sql = $db->query( "
    SELECT branch.*, MAX(review.rating) AS m
    FROM branch
    LEFT OUTER JOIN review ON branch.bid = review.bid
    WHERE branch.address2 LIKE '$query' OR branch.postcode LIKE '$query-%'
    GROUP BY branch.bid
    ORDER BY m DESC, branch.branch ASC
    LIMIT $start,$limit 
" ) or die( "Select failed: (" . $db->errno . ") " . $db->error );

最佳答案

Meghraj Choudhary 的子查询解决方案应该可行。

但是,联接速度更快。子查询需要额外的磁盘访问。假设 branch.bid 是主键,下面的代码应该更快:

SELECT b1.*, b2.m FROM branch b1
INNER JOIN
(
SELECT branch.bid, MAX(review.rating) AS m
FROM branch
LEFT OUTER JOIN review ON branch.bid = review.bid
WHERE branch.address2 LIKE '$query' OR branch.postcode LIKE '$query-%'
GROUP BY branch.bid
LIMIT $start,$limit
) b2 ON
b1.bid = b2.bid
ORDER BY b2.m DESC, b1.branch ASC

这个我没试过。所以,请尝试并回发。

关于php - MySQL JOIN 和 MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659811/

相关文章:

可靠地设置 Etag

php - 带默认功能值的 PDO LIMIT

java - 如何在hibernate中使用条件sql查询

mysql - docker : SQLSTATE[HY000] [2002] No such file or directory 上的 nextcloud 和 mariadb(两者)

php - MYSQL JOIN所有子行,父行只显示一次

mysql - UNION 查询不返回额外的列

php - Laravel 搜索重复返回数据

php - 确保仅预授权个人访问应用程序

PHP/MySQL 请求计数器

mysql - 内连接查询 - 3 个表