2012-02-27 208 views
0

好吧,尽可能简单,因为我可以解释。MySql加入和子查询

  • 有很多child.sidparent.id
  • 有很多child.nidchild.sid
  • 有很多child.idchild.nid

child.id只是一个子行的ID。并且每行有rating列。

在查询我分组child.nid。但是,返回的结果是每个nid的第一项(最低child.id)。我想要的是nid的最高评分child.id

$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

你绝对可以把它包在像这样的另一个查询:

$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报告,不过,做这样的事情的时候检查的性能优化。

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

+0

试过,它是我的错误'你的SQL语法有错误;检查与你的MySQL服务器相对应的手册......“它仍然不起作用 – user892134 2012-02-27 13:16:34

+0

我刚刚粘贴了你的代码并进行了查询,所以我假设你的原始查询是正确的,但它看起来不正确。看起来是问题的单词结果的两个例子。 – davidethell 2012-02-27 19:07:36