MySQL的:加入4表问题的结果

时间:2018-11-26 16:23:14

标签: mysql

我有4个表并与所有表连接,然后我想在这里显示数据:

pr_id |nama | jumlah_liker | id_user
1     |Milk |        5     | 1
2     |Choco|        0     | 1

评论表产品

pr_id | nama
1     | Milk
2     | Choco
3     | Salad 

查看表喜欢者

id_produk | id_user
1         | 1 
1         | 1 
1         | 1 
1         | 3 
1         | 2

检阅表Featured_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

1 个答案:

答案 0 :(得分:1)

  • 编辑:首先,我的建议是,我实际上将将产生确切要求的结果的内容放在底部

您似乎正在尝试显示每个“精选产品”的喜欢程度。

尚不清楚您要使用用户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

,如果您只想查看一位用户喜欢的项目,请添加:

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

但是请尝试其他一些示例查询。他们可能会更有帮助。