Я пытаюсь выбрать строки и добавить к этому выбору логическое значение для проверки существования отношения «многие ко многим», записанного в другой таблице.SQL: выберите строки из таблицы 1 и существует (строки из таблицы 2)
Вот мой код:
$q = $this->dao->prepare('
SELECT wishlists.id, wishlists.title, wishlists.comment, wishlists.date, users.name, users.username
FROM wishlists
LEFT JOIN users ON wishlists.user = users.id
WHERE users.username = :username
ORDER BY wishlists.date DESC
');
$q->bindValue(':username', $user);
$q->execute();
Это возвращает таблицу со всеми своими полями. Я хотел бы добавить столбец этой таблицы с такой подзапрос:
SELECT EXISTS(SELECT 1 FROM wishlists_following WHERE wishlist_id = wishlists.id AND user_id = :current_user_id)
Где current_user_id это идентификатор посетителя и $ пользователь текущей страницы профиля пользователя.
Каков наилучший способ сделать это?
Цель состоит в том, чтобы получить всю информацию о списке желаний и узнать, соответствует ли текущий пользователь этому списку желаний (чтобы отобразить следующую кнопку или нет для каждого возвращенного списка желаний).
Извините, я допустил ошибку в моем подзапросе. Фактически, user_id должен быть равен текущему идентификатору посетителя, а не идентификатору профиля пользователя. (желаем, чтобы имя пользователя содержалось в $ user) –
Это не меняет ответ: при первом запросе вы сможете получить все списки пожеланий, в том числе те, которые не связаны с user_id, который вы передали как параметр. Является ли посетитель другой таблицей в вашей модели БД или идентификатором таблицы пользователя? Просьба сообщить информацию. – jrmthblt
Это же таблица. Вот моя БД: пользователей (идентификатор, имя пользователя и другая информация) Списки желаний (id, title, comment, user_id) -> Отношение «все к одному» whishlists_following (id, user_id, wishlist_id) -> Many-to -many relationship Таким образом, пользователь 1 (посетитель) может следовать за списком пожеланий, принадлежащим пользователю 2 (текущая страница профиля). –