2013-03-11 76 views
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

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>>> 
+0

我的上帝!!!!!非常感谢你。该查询由codeigniter的活动记录输出。谢谢@DreamEater! – 2013-03-11 03:41:01

+0

@smhnaji不知道为什么你使用'current_user'作为'user'的别名。你必须更多地输入交易。 :P – hjpotter92 2013-03-11 03:42:51

+0

是的,也许这根本不是一个好主意。不管怎样,谢谢你。 – 2013-03-11 03:45:58

0

你应该得到的会话用户的公司标识,使之成为更容易对自己和DB 。

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

像这样的东西应该工作得很好。

+0

显然是错的。但是,谢谢你的尝试。 – 2013-03-11 03:39:39

+0

对不起,为什么它错了? – 2013-03-11 03:42:43

+0

您没有定义'current_user_id'表。 – hjpotter92 2013-03-11 03:45:16

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,更优化,相同的结果!

相关问题