2013-03-11 82 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,更優化,相同的結果!

相關問題