2016-05-18 23 views
0

画像/記号の好きな数を含む3つの別々のテーブルからデータを表示したい。現在、結果配列は1つの結果しか出力しません。カウントを削除すると、5つのすべてが印刷されます。JOINとCOUNTが1つの結果しか出力しない

$query = " 
    SELECT 
     image_url, image_path, date, location, fname, lname, rating, 
     COUNT(DISTINCT likes.sign_id) as 'count' 

    FROM 
     signs 
     INNER JOIN users ON signs.user_id=users.user_id 
     INNER JOIN likes ON (signs.sign_id=likes.sign_id) 
     WHERE location='Oslo' LIMIT 5"; 

$result = mysqli_query ($db_server, $query) or die ("Could not find uploads" . mysqli_error ($db_server)); 
while ($row = mysqli_fetch_assoc ($result)) { 
          print_r($row);}

は、私は別のアプローチを試してみましたが、問題は同類の正確な量をカウントしないCOUNT、であるように思われます。したがって、なぜ結果が出力されないのかわかりません。

+0

あなたは( '数を使って、PHPでそれをしないのはなぜ) 'として:http://php.net/manual/en/function.count.php –

答えて

2

あなたはgroup by句が欠落しています

SELECT 
     image_url, image_path, date, location, fname, lname, rating, 
     COUNT(DISTINCT likes.sign_id) as 'count' 

    FROM 
     signs 
     INNER JOIN users ON signs.user_id=users.user_id 
     INNER JOIN likes ON (signs.sign_id=likes.sign_id) 
     WHERE location='Oslo' 
     GROUP BY image_url, image_path, date, location, fname, lname, rating 
     LIMIT 5; 

、あなたが欲しいそれらのかを指定する必要はない場合、これは、このすべての列が同じであるときにのみ動作します。

あなたが意図した場合、あなただけの、あなたは、このような相関クエリを使用することができ、それぞれの行に次の列の合計を持つようにしたい:

SELECT 
     image_url, image_path, date, location, fname, lname, rating, 
     (SELECT COUNT(DISTINCT l.sign_id) FROM likes l 
     WHERE signs.sign_id=l.sign_id) as `count` 
    FROM 
     signs 
     INNER JOIN users ON signs.user_id=users.user_id 
     INNER JOIN likes ON (signs.sign_id=likes.sign_id) 
     WHERE location='Oslo' 
     LIMIT 5; 
+0

迅速な返信をありがとう!別の小さな問題が発生し、私は好きではない画像を照会するように見えない。これにも簡単な解決策はありますか? –

+0

@ØyvindHjartnes 'INNER JOIN'を' LEFT JOIN'に置き換えると、何もせずにnullが返されます。 nullの代わりに0を使用する場合は、selectにCOALESCE(count(別名like.sign_id)、0)を使用します。 – sagi

+0

よかった、素晴らしい。私はこれを理解しようと数時間立ち往生しました:)。 –

関連する問題