、グループIは、コードの下に使用しますが、私は何を期待戻らない
テーブルの関係は、複数のmedia_user_action
などがあります。 私はこの数
rows: [
{
"id": 1
},
{
"id": 2
}
]
することにより、各gallery
どのように多くのmedia_user_action
と注文をカウントすると、このクエリはLEFT JOIN
サブクエリでmedia_user_action
行のみを選択するので、私が思う
rows: [
{
"id": 1
},
{
"id": 1
},
{
"id": 2
}
...
]
のような重複ギャラリー行の何かを返します。グループによってmedia_id
、 をグループ化する必要があります。gallery_id
?
SELECT
g.*
FROM gallery g
LEFT JOIN gallery_media gm ON gm.gallery_id = g.id
LEFT JOIN (
SELECT
media_id,
COUNT(*) as mua_count
FROM media_user_action
WHERE type = 0
GROUP BY media_id
) mua ON mua.media_id = gm.media_id
ORDER BY g.id desc NULLS LAST OFFSET $1 LIMIT $2
テーブル
gallery
id |
1 |
2 |
gallery_media
id | gallery_id fk gallery.id | media_id fk media.id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 3
....
media_user_action
id | media_id fk media.id | user_id | type
1 | 1 | 1 | 0
2 | 1 | 2 | 0
3 | 3 | 1 | 0
...
media
id |
1 |
2 |
3 |
UPDATE
私が選択する必要が複数の他のテーブルがありますが、これは、ユーザ入力オプションは、クエリを構築し、このhttps://jsfiddle.net/g8wtqqqa/1/のような機能で一部です。
は、だから私は私の質問を修正、私は、ユーザーがそれによってmedia_user_action
順番をカウントしたい場合は、私がしたいの方法を見つける必要がある可能サブクエリでこれらを配置する方法を知っている他のコードを変更しない
ベース@trincotの下で、私はコードを更新し、ちょうど少し変更してサブクエリにそれらを入れてmedia_count
を追加します。私が欲しいものです、
今、それらはgallery.idでグループ化されていますが、sortとmedia_countのdescとascは同じ結果です。なぜ見つからないのですか?
SELECT
g.*,
row_to_json(gi.*) as gallery_information,
row_to_json(gl.*) as gallery_limit,
media_count
FROM gallery g
LEFT JOIN gallery_information gi ON gi.gallery_id = g.id
LEFT JOIN gallery_limit gl ON gl.gallery_id = g.id
LEFT JOIN "user" u ON u.id = g.create_by_user_id
LEFT JOIN category_gallery cg ON cg.gallery_id = g.id
LEFT JOIN category c ON c.id = cg.category_id
LEFT JOIN (
SELECT
gm.gallery_id,
COUNT(DISTINCT mua.media_id) media_count
FROM gallery_media gm
INNER JOIN media_user_action mua
ON mua.media_id = gm.media_id AND mua.type = 0
GROUP BY gm.gallery_id
) gm ON gm.gallery_id = g.id
ORDER BY gm.media_count asc NULLS LAST OFFSET $1 LIMIT $2
重複が発生した理由を説明した回答を投稿しましたので、あなたの質問に答えています。あなたは実際に何を達成したいのか、そしてあなたの問い合わせ結果があなたが望むものとどのように違うのかを伝える別々の要求をしたいかもしれません。 (すべてのギャラリーレコードが必要な場合は、ギャラリーから選択することができます。これはおそらくあなたの後ろではありません) –
返信ありがとうございます、私はすべての質問を更新しますギャラリーと他の関係テーブルを選択したい – user1575921
質問に追加された「編集」は別の質問です。他のテーブルや別の問題もあります。 – trincot