Позвольте мне сначала задать ситуацию.MySQL-условие SQL. Возможно ли мой сценарий?
У меня есть таблица «пользователей» с полями X, поля не имеют значения для моего вопроса, кроме «видимости». Видимость - это tinyint, а значения означают следующее (0 = видимое для всех, 1 = видимое только для друзей и 2 = невидимое).
У меня также есть стол (id, user_id, target_user_id)
. user_id
является другом с target_user_id
. Достаточно легко?
Вот где он становится липким. Im написание PHP API и мой метод класса выглядит вроде как это:
public function getUsers($requester, $page, $num) {}
- в
$requester
это идентификатор пользователя лица, запрашивающего пользователи $page
является пагинацией номера страницы$num
- количество позиций на странице
Что я хочу делать в SQL, получается, что $num
пользователей из таблицы users, если thei r поле видимости = 0 или 1. Если флаг видимости равен 1, мне нужно убедиться, что идентификатор пользователя и запрашивающий $ являются друзьями в таблице друзей и только возвращают этого пользователя, если они являются друзьями.
Я думал об использовании PHP для фильтрации видимости после того, как я верну свои результаты, но разбиение на страницы (ограничение) будет испорчено, если я попрошу, например, 5 записей, и один или несколько пользователей имеют видимость, равную 1, и не друзья с запрашивающим. Это в значительной степени нужно сделать полностью через sql.
Возможна ??
Вы попробовали что-нибудь? это довольно просто ... На самом деле вы сами сделали это условие в своем вопросе, вам просто нужно переписать его на sql –
Возможно, да, есть игра и посмотреть, что вы придумали. Хорошее место для рассмотрения синтаксиса 'WHERE', поскольку все, что вы просите, это' WHERE visibility = 0 OR (visibility = 1 AND somethingToCheckFriends) '. «ЛЕВЫЙ ПРИСОЕДИНЯЙТЕ», скорее всего, тоже будет. Прочитайте их, сделайте некоторые исследования и попробуйте кое-что. –
Для них, чтобы быть друзьями, должна быть запись от А до Б И от Б до А в таблице друзей? – diolemo