好的,最容易解释的。
child.sid
到parent.id
。child.nid
到child.sid
child.id
到child.nid
child.id
只是子行的id。每行都有rating
列。
在查询中,我按child.nid
进行分组。但是返回的结果是每个child.id
的第一个条目(最低nid
)。我想要的是child.id
评分最高的nid
。
$construct = "SELECT child.* FROM outcomes child
JOIN outcomes parent on parent.id=child.sid JOIN
WHERE (parent.name LIKE '%$search%') GROUP BY child.nid,child.sid
ORDER BY child.rating DESC";
我已尝试ORDER BY child.rating DESC
,但这需要在GROUP BY child.nid
之前发生。
知道如何解决这个问题吗?子查询?
答案 0 :(得分:0)
你绝对可以将它包装在另一个查询中:
$construct = "SELECT * FROM (SELECT child.* FROM child
JOIN parent on parent.id=child.sid JOIN
WHERE (parent.name LIKE '%$search%') GROUP BY child.nid,child.sid)
ORDER BY child.rating DESC";
观察EXPLAIN报告,并在执行此类操作时检查性能优化。
编辑:更新了代码以删除对父数据库的引用。