MySql加入和子查询

时间:2012-02-27 11:51:18

标签: mysql

好的,最容易解释的。

  • 有许多child.sidparent.id
  • 有许多child.nidchild.sid
  • 有许多child.idchild.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之前发生。

知道如何解决这个问题吗?子查询?

1 个答案:

答案 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报告,并在执行此类操作时检查性能优化。

编辑:更新了代码以删除对父数据库的引用。