Доктрина родной 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  |
---------------------------------------------|

Большое спасибо всем, кто мог бы помочь мне:)

0 ответов

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