mysql - Mysql : Join 4 table 问题的结果
问题描述
我有 4 个表格并加入所有表格,然后我想在这里显示数据:
pr_id |nama | jumlah_liker | id_user
1 |Milk | 5 | 1
2 |Choco| 0 | 1
复习表 produk
pr_id | nama
1 | Milk
2 | Choco
3 | Salad
评论表喜欢者
id_produk | id_user
1 | 1
1 | 1
1 | 1
1 | 3
1 | 2
评论表 features_ukm
id | id_produk
1 | 1
2 | 2
但我有sql记录
id_produk | nama | jumlah_liker | id_user
1 | milk | 1 | 1 //problem row i dont get count all record id_produk
2 | choco | 0 | 1
SELECT produk.*, COUNT(liker.id_produk), liker.id_user
FROM produk
left join liker ON liker.id_produk = produk.pr_id AND liker.id_user = 1
INNER JOIN featured_ukm ON featured_ukm.id_produk = produk.pr_id
GROUP BY featured_ukm.id_produk
解决方案
- 编辑:我的建议是第一,我实际上把会产生你确切要求的结果的东西放在底部
您似乎试图显示每个“特色产品”有多少喜欢。
尚不完全清楚您要对用户 ID 做什么,或者它在结果集中的用途是什么;这是一个查询,显示每个“特色产品”有多少喜欢:
SELECT
produk.*,
(SELECT IFNULL(COUNT(*), 0)
FROM liker WHERE liker.id_produk = produk.pr_id)
FROM featured_ukm F
INNER JOIN produk ON produk.pr_id = F.id_produk
这是一个查询,显示每个用户喜欢每个产品的次数
SELECT DISTINCT
P.*,
(SELECT IFNULL(COUNT(*), 0) FROM liker WHERE liker.id_user = L.id_user),
IFNULL(L.id_user, 0)
FROM produk P
LEFT JOIN liker L ON L.id_produk = P.pr_id
如果您只想查看 ONE 用户喜欢的项目,请添加:
WHERE L.id_user = 1
到最后。
这是一个查询,显示每个特色产品对每个用户 ID 有多少喜欢:
SELECT DISTINCT
P.*,
(SELECT IFNULL(COUNT(*), 0) FROM liker WHERE liker.id_user = L.id_user),
IFNULL(L.id_user, 0)
FROM produk P
LEFT JOIN liker L ON L.id_produk = P.pr_id
INNER JOIN featured_ukm F on F.id_produk = P.pr_id
要获得您正在寻找的确切结果集(在您的示例中),您需要在查询中引用用户表。我假设您有一个,因为您正在引用用户 ID。出于本示例的目的,我正在创建下面的用户表。
id | name
----------------
1 | user_one
2 | user_two
3 | user_three
使用此表,以下查询将准确给出您正在寻找的内容:
SELECT P.*, (SELECT IFNULL(COUNT(*), 0) FROM liker WHERE liker.id_produk =
F.id_produk), user.id
FROM user
CROSS JOIN featured_ukm F
LEFT JOIN produk P ON F.id_produk = P.pr_id
WHERE user.id = 1
但是玩弄我的其他一些示例查询。他们可能更有帮助。