2012-02-27 18 views
0

わかりやすく、私が説明できるように。MySql Joinとサブクエリ

  • child.sidparent.idが多数あります。
  • 多くchild.nid多くはchild.id

    child.id

child.nidにあります
  • child.sidには、子行だけの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レポートを見て、このような何かを行う際のパフォーマンスの最適化を確認してください。

    EDIT:親データベースへの参照を削除するようにコードを更新しました。

    +0

    それを試してみましたが、エラーです。 'あなたはSQL構文にエラーがあります。あなたのMySQLサーバーに対応するマニュアルを確認してください... "それでも動作しません – user892134

    +0

    あなたのコードを貼り付けてクエリを書きましたので、元のクエリは正しいと思われましたが間違っています。問題と思われる単語の結果の2つのインスタンス。 – davidethell