三个表上的JOIN不起作用

时间:2014-05-20 05:41:47

标签: php mysql sql

我有这三个表,usercategoriesfiles

users,表格中有一列user_id

enter image description here

我有这个显示所有类别的查询。

SELECT
    `categories`.`category_id`, `categories`.`timestamp`,`categories`.`name`,       
    LEFT(`categories`.`description`, 50) as `description`,
    COUNT(`files`.`file_id`) as `file_count`
FROM `categories`
LEFT JOIN `files`
    ON `categories`.`category_id` = `files`.`category_id`
GROUP BY `categories`.`category_id`

我想要做的是仅显示由特定用户创建的类别。 添加WHERE user.user_id = categories.category_id会给出

  

未知列users.user_id

3 个答案:

答案 0 :(得分:0)

问题是你没有在任何地方加入users表(同样,你的WHERE语句中有一个拼写错误:user.user_id,应该是users.user_id)。

所以,我想你想添加类似的东西(在你的FROM语句中):

categories INNER JOIN users ON categories.user_id = users.user_id

根据您喜欢的user_id过滤(使用where语句)。

干杯!

答案 1 :(得分:0)

由于您没有从用户表中获取任何额外信息,因此无需在此处加入用户表。下面的查询应该会给你想要的结果。

SELECT
    `categories`.`category_id`, `categories`.`timestamp`,`categories`.`name`,       
    LEFT(`categories`.`description`, 50) as `description`,
    COUNT(`files`.`file_id`) as `file_count`
FROM `categories`
LEFT JOIN `files`
    ON `categories`.`category_id` = `files`.`category_id`
where `categories`.`user_id` = 2
GROUP BY `categories`.`category_id`;

答案 2 :(得分:0)

如果您需要在users表中包含一些信息,您肯定也应该加入users表。或者,如果您想要计算特定用户创建的所有类别。否则,没有目的可以WHERE user.user_id = categories.category_id

如果不是categories.category_id过滤的情况。