MySQL получает подписчиков от определенного пользователя в c#

#c# #mysql

#c# #mysql

Вопрос:

В настоящее время моя база данных состоит из 2 таблиц. Одна из них — таблица пользователей, а другая — таблица подписчиков. Пользователи могут подписываться друг на друга, что означает, что в таблице подписчиков будет строка, которая выглядит следующим образом:

 Table: followers
Row: user_id | follower_id
  

Итак, если у меня есть 3 пользователя:

 User 1 | id = 1
User 2 | id = 2
User 3 | id = 3
  

И пользователь 1 следует за пользователем 2, а пользователь 2 следует за пользователем 3, строки в таблице подписчиков будут выглядеть следующим образом:

 user_id = 2 | follower_id = 1
user_id = 3 | follower_id = 2
  

Все это работает нормально, но как мне создать запрос, если я хочу получить всех подписчиков от этого пользователя в c #? В моем классе есть список идентификаторов людей, которые подписаны на этого пользователя. Вот так: (Это может быть список пользовательских объектов, мне просто нужны идентификаторы на данный момент)

 public class User
{
    public int id { get; set; }
    public List<int> followers { get; set; }
}
  

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

Комментарии:

1. Вам нужны все отдельные подписчики или список подписчиков для определенного пользователя. Если это произойдет позже, ваш класс должен предоставить вам список. Если я правильно понял…

2. I want to retrieve all followers from this user in c# Какой пользователь?

3. В SQL это делается с помощью соединения между таблицей user и таблицей followers. Вы ищете текст запроса для использования?

4. Простой запрос с соответствующим where предложением должен сделать свое дело.

5. @Steve, если бы ты мог, да. Я не знаю, как поместить эти идентификаторы в список пользователя

Ответ №1:

Запрос может выглядеть следующим образом:

 SELECT u.id, u.name, GROUP_CONCAT(f.follower_id) AS list_of_followers
FROM user u
JOIN followers f ON u.id = f.user_id
WHERE u.id = 2 
GROUP BY u.id, u.name
  

list_of_followers это просто разделенный запятыми список всех подписчиков пользователя with id=2 . Вы можете легко проанализировать строку и заполнить List<int> из нее.

Редактировать:

Если вы хотите также получить пользователей без подписчиков, вы можете изменить приведенный выше запрос следующим образом:

 SELECT u.id, u.name, 
       GROUP_CONCAT(f.follower_id) AS list_of_followers,
       COUNT(f.follower_id) AS count_of_followers
FROM user u
LEFT JOIN followers f ON u.id = f.user_id
WHERE u.id = 2 
GROUP BY u.id, u.name
  

Для пользователей, у которых нет подписчиков count_of_followers = 0 .

Комментарии:

1. Хорошо, быстрый вопрос, я хочу использовать этот запрос для получения пользователей, у которых тоже нет подписчиков. Когда я пытаюсь это сделать, он возвращает null. Это исправимо?