2012-02-27 134 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