Две таблицы:
user (id, myValue, ...)
user_preferred (id, userid, preferredValue) fk userid -> user(id)
Объяснение:
Пользователь - это таблица всех пользователей.user_preferred - таблица предпочтительных значений любого пользователя.Пользователь может быть указан несколько раз в user_preferred, но он должен иметь разные значения.Запрос должен возвращать всех пользователей, у которых myValue соответствует предпочтительному значению данного пользователя.$ userid - это переменная php, которую передал пользователь.
Трюк:
У пользователя не может быть предпочтений, в этом случае в таблице user_preference нет записи.,Когда приведенный выше запрос выполнен, я хочу вернуть каждого пользователя, если у данного пользователя нет предпочтений.
Аналогия:
Я нахожусь в баре и барменспрашивает меня, что я хочу пить.Я говорю, дай мне все, что у него есть, что соответствует моим предпочтениям.В первом туре я говорю, что я люблю дерьмовое пиво.Поэтому он дает мне Фостерс.Во втором раунде я говорю, что у меня нет предпочтений, и он дает мне 12 пинт, начиная от Bud Light до Гиннесса.Вместо пива это будут пользователи.Получите?
Запрос (пока):
SELECT * FROM user WHERE
IF ((SELECT preferredValue FROM user_preferred WHERE userid = $userid) IS NULL,
1,
user.myValue ANY (SELECT preferredValue FROM user_preferred WHERE userid = $userid)
)
Дополнительный трюк:
Я не хочузапустить «SELECT предпочитаемое значение из user.preferred, где id = $ userid» дважды.Можно ли сохранить результаты из первого времени выполнения и как-то использовать его вместо второго?