0

非常にうまく機能するクエリがあります。それから始めましょう:

編集: SQLが更新されました。私0はすべての列に入ります。

   SELECT i.item, i.user_id, u.username,
        (COALESCE(r.ratetotal, 0)) AS total,
        (COALESCE(c.commtotal, 0)) AS comments,
        (COALESCE(r.rateav, '50%')) AS rate,
        (COALESCE(x.wasRated, '0')) AS wasRated
        FROM items AS i
        LEFT JOIN master_cat AS c
            ON (c.cat_id = i.cat_id)
        LEFT JOIN users AS u 
        ON u.user_id = i.user_id    
        LEFT JOIN
            (SELECT item_id, 
            COUNT(item_id) AS ratetotal, 
            AVG(rating) AS rateav 
            FROM ratings GROUP BY item_id) AS r 
        ON r.item_id = i.item_id
        LEFT JOIN
            (SELECT item_id, 
            COUNT(item_id) AS commtotal 
            FROM reviews GROUP BY item_id) AS c
        ON c.item_id = i.item_id
        LEFT JOIN
            (SELECT xu.user_id, ra.item_id, '1' AS wasRated
            FROM users AS xu
            LEFT JOIN ratings AS ra
                ON ra.user_id = xu.user_id
            WHERE xu.user_id = '1') AS x 
         ON x.user_id = u.user_id
              AND x.item_id = r.item_id
        WHERE c.category = 'Movies' 
        ORDER by i.item ASC;

もう1つ関数を追加する必要があります。AS x

基本的に、ここには重要な3つのテーブルがあります。 itemsreviewsおよびratings。上部には、各アイテムの平均や合計などの統計を取得しているサブクエリがあります。

user_id、、item_idおよびrate_id(in )に関連付けられた最終クエリが必要ratingsです。最終結果では、各アイテムとそれを含む統計が一覧表示されます。ログインしたユーザーが評価した場合は、単純なtrueまたはfalseの列がもう1つ必要です。だから私はこのようなものが必要です:

SELECT ???
FROM ratings AS r
WHERE r.user_id = '{$user_id}'

user_idログインしたユーザーのはPHPから渡されます。`)

情報の最後のビットを取得し、それを親クエリのアイテムの各行に配置するサブクエリを作成するにはどうすればよいですか?

4

1 に答える 1

1

これを親クエリに追加します。

, coalesce(x.WasRated, 'false') as WasRated

あなたの x サブクエリは次のとおりです。

(select users.user_id
 , ratings.item_id
, 'true' WasRated
from users join ratings on user.user_id = ratings.user_id
where users.user_id = the one for the logged in user
) x on x.user_id = users.user_id
and x.item_id = ratings.item_id

またはそれのようなもの。

于 2013-02-16T23:01:34.057 に答える