Php 如何制定查询以联接多个表

Php 如何制定查询以联接多个表,php,mysql,join,Php,Mysql,Join,我的桌子如下 users id name 1 Michael 2 James 3 John 4 Susie 5 Harvey products pid name uploader post_id views exclude groupid 1 learn_java 2 1 21 0 1

我的桌子如下

users id name 1 Michael 2 James 3 John 4 Susie 5 Harvey products pid name uploader post_id views exclude groupid 1 learn_java 2 1 21 0 1 2 learn_sql 1 2 8 0 2 3 4 GB DDR3 0 3 5 0 3 4 love jacket 2 4 0 0 5 5 1 TB HDD 3 5 12 1 4 6 kill_ants 3 6 5 0 6 7 2 TB HDD 2 7 2 0 4 8 8 GB DDR3 2 8 18 0 3 9 1 GB DDR2 3 9 7 0 3 product_group gid name category 1 text 1 2 pdf 1 3 ram 2 4 hdd 2 5 leather 0 6 diy 0 product_category cid name 1 book 2 electronics /* forgot about comment field*/ comments comment_id post_id comment 1 1 ... 2 1 ... 3 2 ... 4 2 ... 5 2 ... 6 3 ... 这显然不起作用,因为它不包括没有上传任何产品的用户。如何将这些用户考虑在内

编辑:


选择COUNTpid作为产品编号, SUMU视图作为总视图 用户* 来自用户 在products.uploader=users.id上左键连接产品 在products.groupid=product\u group.category上内部联接product\u组 其中exclude=0 和产品类别!=0 按用户分组。id 按产品编号订购 它也不接受0用户的上传

第二次编辑:

我添加了一个评论表,我之前忘记了。有没有办法显示用户的评论总数

在这里,James上传了产品1、4、8。对于这些post_id也是1,4,8,在实际中,它们将不一样。从评论表中,这些帖子的评论数量如下:2、0、0。因此,评论总数为2

所以,最终的结果应该是

product_num users.id users.name total_views total_comments 3 2 James 41(21+18+2) 2 1 3 Jones 7 0/NULL 1 1 Michael 8 3 0 5 Harvey 0/NULL 0/NULL 0 4 Susie 0/NULL 0/NULL 请尝试以下查询:

SELECT COUNT(pid) as product_num,
       SUM(views) as total_views,
       u.*
FROM users u
LEFT JOIN products p
  ON p.uploader = u.id
LEFT JOIN product_group pg
  ON p.groupid = pg.gid
WHERE p.exclude = 0 
  AND p.uploader <> 0 
  AND pg.category != 0
   OR p.pid is null
GROUP BY u.id
这样:

SELECT COUNT(pid) as product_num,
       SUM(views) as total_views,
       ( SELECT count(*)
         FROM comments c
         WHERE c.post_id = p.post_id
       ) As total_comments,
       u.*
FROM users u
LEFT JOIN products p
  ON p.uploader = u.id
LEFT JOIN product_group pg
  ON p.groupid = pg.gid
WHERE p.exclude = 0 
  AND p.uploader <> 0 
  AND pg.category != 0
   OR p.pid is null
GROUP BY u.id

演示:

可能使用左连接而不是内部连接JOIN@MarkBaker我试过了,但它给出了不正确的产品编号、视图等。我似乎无法给出连接之外的WHERE子句。如果我这样做,则不会选择未上载的用户。您可能只希望在产品上使用左连接,但在产品组上保留内部连接结果是什么?选择COUNTpid作为产品编号,SUMviews as total_views users.*从用户左外部加入products上的产品。uploader=users.id左外部加入products上的产品组。groupid=product_group.category,其中exclude=0和product_group.category!=0我想OP需要按COUNTpid排序的数据,谢谢。它起作用了。我会接受的。但我刚刚添加了另一个表注释。如果你也能帮我,那就太好了。我在答案中添加了一个例子,请看一下。
         SELECT count(*)
         FROM comments c
         WHERE c.post_id = p.post_id
SELECT COUNT(pid) as product_num,
       SUM(views) as total_views,
       ( SELECT count(*)
         FROM comments c
         WHERE c.post_id = p.post_id
       ) As total_comments,
       u.*
FROM users u
LEFT JOIN products p
  ON p.uploader = u.id
LEFT JOIN product_group pg
  ON p.groupid = pg.gid
WHERE p.exclude = 0 
  AND p.uploader <> 0 
  AND pg.category != 0
   OR p.pid is null
GROUP BY u.id