Задать вопрос
  • Как реализовать хранение друзей в БД?

    @helarqjsc
    Так хранить друзей это не очень хорошая идея. Если на сайте будет 1000 пользователей и у каждого по 100 друзей, то у вас будет таблица на 200000 записей, и довольно медленные запросы для такой простой штуки как список друзей.
    Я бы сделал денормализацию, то есть просто хранил бы список друзей строкой в поле модели user :)
    Быстрые запросы, так как пропарсить строку в несколько сотен символов будет быстрее, чем делать запрос к таблице в несколько сотен тысяч записей, да и в разработке такой способ проще.
    Хотя возможно я ошибаюсь и разница в производительности будет не такой большой.

    Собственно, отвечаю на ваш вопрос. Нужно просто получить список всех записей, где user1 есть в поле user или friend, затем уже в коде определить, взаимные это друзья (есть запись где user1 в поле friend, и запись где user1 в поле user, второй пользователь одинаковый в обоих запросах) или кто-то из них только отправил запрос. Запрос будет чем-то вроде:
    select user, friend from friends where user=:user_id or friend=:user_id
    Ответ написан
    2 комментария