У меня есть таблица conversation
, которая содержит два идентификатора пользователя как внешние ключи и пользовательскую таблицу, которая содержит данные пользователей. Я хочу написать запрос, который возвращает таблицу conversation
, соединенную с таблицей пользователя, но отображающую имя и фамилию пользователя, идентификатор которого не был отправлен в качестве параметра.SQL JOIN с условиями
CREATE TABLE `conversation` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_one_id` int(11) NOT NULL,
`user_two_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`surname` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
Например, у меня есть
Диалог:
id user_one_id user_two_id
1 1 2
Пользователь:
id name surname
1 userone_name userone_surname
2 usertwo_name usertwo_surname
Я хочу, чтобы запрос, который будет возвращать user_two имя и фамилию в присоединиться, а не пользователя один. Мой текущий запрос:
SELECT c.id, c.user_one_id, c.user_two_id, u.name, u.surname * FROM conversation c
JOIN user u
WHERE c.user_one_id = 1
OR c.user_two_id = 1
AND IF (c.user_one_id = u.id, c.user_two_id = u.id, c.user_one_id = u.id)
GROUP BY c.id
ORDER BY c.date DESC;
Общего GROUP BY правило говорит: Если указано предложение GROUP BY, каждая ссылка столбца в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции set! – jarlh