2014-02-10 3 views
0

Я пытаюсь выбрать строки и добавить к этому выбору логическое значение для проверки существования отношения «многие ко многим», записанного в другой таблице.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 это идентификатор посетителя и $ пользователь текущей страницы профиля пользователя.

Каков наилучший способ сделать это?

Цель состоит в том, чтобы получить всю информацию о списке желаний и узнать, соответствует ли текущий пользователь этому списку желаний (чтобы отобразить следующую кнопку или нет для каждого возвращенного списка желаний).

ответ

0

при использовании LEFT JOIN между списком пожеланий и пользователями, если в списке желаний нет соответствующего пользователя, вы получите значение NULL для имени пользователя и пользователя столбца.

Так что я не думаю, что вам нужен еще один запрос: вам просто нужно проверить недействительность столбца users.name, как только вы получите результаты вашего первого запроса.

+0

Извините, я допустил ошибку в моем подзапросе. Фактически, user_id должен быть равен текущему идентификатору посетителя, а не идентификатору профиля пользователя. (желаем, чтобы имя пользователя содержалось в $ user) –

+0

Это не меняет ответ: при первом запросе вы сможете получить все списки пожеланий, в том числе те, которые не связаны с user_id, который вы передали как параметр. Является ли посетитель другой таблицей в вашей модели БД или идентификатором таблицы пользователя? Просьба сообщить информацию. – jrmthblt

+0

Это же таблица. Вот моя БД: пользователей (идентификатор, имя пользователя и другая информация) Списки желаний (id, title, comment, user_id) -> Отношение «все к одному» whishlists_following (id, user_id, wishlist_id) -> Many-to -many relationship Таким образом, пользователь 1 (посетитель) может следовать за списком пожеланий, принадлежащим пользователю 2 (текущая страница профиля). –

0

Проверьте имя или имя пользователя в первом запросе - либо в запросе напрямую, либо в вашем скрипте после выполнения запроса, если он равен нулю, это означает, что пользователь не выполняет список пожеланий, иначе он/она делает. Ключом является использование LEFT join, позволяющего это, и у вас уже есть это.

Смежные вопросы