2011-06-21 24 views
0

このクエリを取得したので、avgscoreからmysqlの結果を取得できますか?事前平均結果をフェッチするmysqlクエリ

文全体で

SELECT * FROM dog_clinic 
LEFT JOIN (SELECT AVG(score) AS avgscore, input_id 
FROM dog_clinic_score GROUP BY input_id) s ON s.input_id = dog_clinic.id 
ORDER BY avgscore DESC, visited DESC LIMIT 0,10 

ありがとう:

if ($stmt_dog_clinic = $mysqli->prepare("SELECT dog_clinic.id, dog_clinic.name, dog_clinic.content, dog_clinic.city, dog_clinic.street, dog_clinic.picture, dog_clinic.visited, s.avgscore FROM dog_clinic LEFT JOIN (SELECT AVG(score) AS avgscore, input_id FROM dog_clinic_score GROUP BY input_id) s ON s.input_id = dog_clinic.id ORDER BY s.avgscore DESC, dog_clinic.visited DESC LIMIT 0,10")) 
{ 
    $stmt_dog_clinic->bind_result($id, $name, $content, $city, $street, $picture, $visited, $avgscore); 
    $stmt_dog_clinic->execute(); 
while ($stmt_dog_clinic->fetch()) 
{ echo $avgscore; } 

$ avgscore dsn'tは、任意のデータを生成します。

+1

「s.avgscore DESC、dog_clinic.visited DESC'」にする必要はありませんか? – Rahul

+0

ステートメントは、私はmysqliクラスを使用していると私はavgscoreから結果をバインドする方法を知らない、私はPHPのコードの結果としてそれを必要としているようです。 – Cameleon

+0

エラーメッセージは何ですか? – stefgosselin

答えて

0

[OK]をもう一度取ることができます...左結合を行うことによって、すべての犬クリニックが「スコアリング」レーティングを持っているわけではないことを意味しています...もしそうなら、その値はNULLになりますチョークする。

SELECT 
     dc.*, 
     COALESCE(s.avgscore, 0) FinalAvg 
    FROM 
     dog_clinic dc 
     LEFT JOIN (SELECT dcs.input_id, 
          AVG(dcs.score) AS avgscore 
         FROM 
          dog_clinic_score dcs 
         GROUP BY 
          dcs.input_id) s 
      ON dc.id = s.input_id 
    ORDER BY 
     COALESCE(s.avgscore, 0) DESC, 
     dc.visited DESC 
    LIMIT 
     0,10; 
+0

それはうまくいきます、あなた達はすごいです。 btw、didntはあなたがこれのような名前を短くすることができることを知っていた、いいね。 – Cameleon

+0

ええ...彼らは "エイリアス"名と呼ばれています。特に、自己結合を行っている場合や、目的に応じて同じテーブルに複数回参加する場合は、Emp1やEmp2のようなEmployeeテーブルを持つことができます。 – DRapp

0

あなたはこの意味するか:私はラーフルが正しいと思う

SELECT dog_clinic.*, s.avgscore FROM dog_clinic 
LEFT JOIN (SELECT AVG(score) AS avgscore, input_id 
FROM dog_clinic_score GROUP BY input_id) s ON s.input_id = dog_clinic.id 
ORDER BY s.avgscore DESC, dog_clinic.visited DESC LIMIT 0,10; 

を、それが暗黙のうちにs.avgscore DESC, dog_clinic.visited DESCですが、私は同様に、クエリにこれを統合しています。

+0

まだavgscoreからデータを取得していません。上部ウィンドウにwhooleステートメントを投稿しました。 – Cameleon