Выбор всех пользователей одной компании текущего пользователя

Я немного перепутал!

Идентификатор текущего пользователя хранится в сессии.

Я хочу выбрать всех пользователей, которые имеют одинаковые company_id текущего пользователя.

company_id это поле в user Таблица.

Запрос, который не работает:

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'

3 ответа

Решение

current _user является зарезервированным ключевым словом в MySQL.

Вы должны экранировать его в своем запросе, чтобы пометить его как псевдоним таблицы.

Используйте backtick в своем запросе. Вот так:

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

Я думаю, что это было очень простое решение!

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, более оптимизированный, тот же результат!

Вы должны получить идентификатор компании пользователя сеанса, чтобы сделать это намного проще для себя и для БД.

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

Примерно так должно работать просто отлично.

Другие вопросы по тегам