#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. Это исправимо?