2

我有点混!

当前用户的 id 存储在会话中。

我想选择与company_id当前用户相同的所有用户。

company_iduser表中的一个字段。

不起作用的查询:

SELECT `all_users`.`id`, `all_users`.`username`, `all_users`.`fullname`
FROM (`user` current_user)
JOIN `company` c ON `c`.`id` = `current_user`.`company_id`
JOIN `user` all_users ON `all_users`.`company_id` = `c`.`id`
WHERE `current_user`.`id` = <<<$current_user_id>>>

错误:

You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
'current_user) JOIN `company` c ON `c`.`id` = `current_user`.`company_id` JOIN `u'
4

3 回答 3

4

current _user是 MySQL 中的保留关键字。

您需要在查询中对其进行转义以将其标记为表别名。

在查询中使用反引号。像这样:

SELECT `all_users`.`id`, `all_users`.`username`, `all_users`.`fullname`
FROM `user` `current_user`
JOIN `company` c ON `c`.`id` = `current_user`.`company_id`
JOIN `user` all_users ON `all_users`.`company_id` = `c`.`id`
WHERE `current_user`.`id` = <<<$current_user_id>>>
于 2013-03-11T03:37:34.870 回答
1

我认为它有一个非常简单的解决方案!

SELECT `all_users`.`id`, `all_users`.`username`, `all_users`.`fullname`
FROM (`user` u)
JOIN `user` all_users ON `u`.`company_id` = `all_users`.`company_id`
WHERE `u`.`id` = <<<$current_user_id>>>

更少join,更优化,同样的结果!

于 2013-03-11T05:00:56.057 回答
0

您应该获取会话用户的公司 ID,以使您自己和数据库更轻松。

select * from all_users u left join company c on u.company_id = c.id WHERE u.company_id = current_user_id.company_id

像这样的东西应该可以正常工作。

于 2013-03-11T03:36:45.893 回答