Доктрина родной mysql
У меня есть проблема, чтобы получить отличное значение с помощью "CASE WHEN THEN END". У меня есть таблица пользователей и таблица подписчиков, вот так:
Таблица fos_user:
----------------------------------------------|
id | username | email |
:--|:--------------|--------------------------|
1 | dmaradonapsg | maradona@juventus.com |
2 | mplatini | piero@juventus.com |
3 | delpiero | platini@psg.fr |
4 | zioupsg | zioup@zioupsg.com |
5 | thenri | henri@arsenal.com |
6 | wrooney | rooney@manchester.com |
7 | dneymar | neymar@psg.fr |
----------------------------------------------|
Подписчики таблицы (follower_id и follow_id являются внешним ключом таблицы fos_user)
--------------------------------------------|
follower_id | followed_id | date |
:-----------|:----------------|:------------|
1 | 2 | 2017-09-14 |
1 | 3 | 2017-09-14 |
1 | 4 | 2017-09-17 |
2 | 1 | 2017-09-17 |
2 | 3 | 2017-09-17 |
4 | 2 | 2017-09-17 |
4 | 3 | 2017-09-15 |
5 | 2 | 2017-09-19 |
5 | 3 | 2017-09-19 |
5 | 4 | 2017-09-19 |
5 | 6 | 2017-09-19 |
5 | 7 | 2017-09-19 |
--------------------------------------------|
Например, я пользователь 2 (mplatini), и я ищу кого-то, кто содержит "psg" либо в своем имени пользователя, либо в своем электронном письме. Я хочу знать, сопровождается ли результатом соответствующих пользователей пользователь 2 или нет. За результатом следуют следующие пользователи (dmaradonapsg, delpiero) -> user.id: 1 и 3, потому что пользователь 2 следует за пользователями 1 и 3, а другие пользователи не следуют за пользователем 2
Итак, я сделал этот запрос, чтобы показать результат, который я хочу:
SELECT distinct f.id, s.follower_id, s.followed_id,
(case when s.follower_id = 2 THEN 2 ELSE 0 END) as test
FROM fos_user f
LEFT JOIN follower s ON s.follower_id = f.id
WHERE f.username like '%psg%' OR f.email like '%psg%' ;
/*s.follower_id = 2 is corresponding to user_id 2 */
и результат:
---------------------------------------------|
user_id | follower_id | followed_id | test|
:---------|:-------------|:------------|:----|
1 | 1 | 2 | 0 |
1 | 1 | 3 | 0 |
1 | 1 | 4 | 0 |
2 | 2 | 1 | 2 |
2 | 2 | 3 | 2 |
3 | NULL | NULL | 0 |
4 | 4 | 2 | 0 |
4 | 4 | 3 | 0 |
7 | NULL | NULL | 0 |
---------------------------------------------|
Проблема с этим запросом в том, что есть дубликаты user_id
Итак, я попытался сгруппировать по follow_id, но результат теперь не правильный!
---------------------------------------------|
user_id | follower_id | followed_id | test|
:---------|:-------------|:------------|:----|
3 | NULL | NULL | 0 |
2 | 2 | 1 | 2 |
1 | 1 | 2 | 0 |
1 | 1 | 3 | 0 |
1 | 1 | 4 | 0 |
---------------------------------------------|
Follow_id 3 имеет значение 0 для полевого теста. Итак, мой вопрос: как запросить мою базу данных, чтобы получить такой результат:?
---------------------------------------------|
user_id | follower_id | followed_id | test|
----------|:--------- ---|:------------|:----|
3 | NULL | NULL | 0 |
2 | 2 | 1 | 2 |
1 | 1 | 2 | 0 |
1 | 1 | 3 | 2 |
1 | 1 | 4 | 0 |
---------------------------------------------|
Большое спасибо всем, кто мог бы помочь мне:)