您好,我有一个查询,它通过显示首先评级的评论然后显示尚未评级的评论来执行我想要的操作。但是我似乎无法正确订购它。
结果应该是这样的:
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/