vaflya
@vaflya
Ничего личного, это всего лишь хобби.

Как проверить значение поля 1 table в 2 table?

Есть таблицы, 1 с фильмами ("films"), 2 с подписками ("see_later") на фильмы.

Нужно вывести 10 строк из таблицы "films", при этом проверяя id фильма в таблице "see_later"

$qu = 'SELECT * FROM films ORDER BY year DESC LIMIT 10';

		$result = $db->prepare($qu);
		$result->execute();


		$i = 0;
		while ($row = $result -> fetch ()) {
			$filmsList[$i]['id'] = $row['id'];
			$filmsList[$i]['title_id'] = $row['title_id'];
			$filmsList[$i]['title'] = $row['title'];
			$filmsList[$i]['title_original'] = $row['title_original'];
			$filmsList[$i]['cover'] = $row['cover'];
			$filmsList[$i]['summary'] = $row['summary'];
			$filmsList[$i]['year'] = $row['year'];
			$filmsList[$i]['rate'] = $row['rate'];
			$filmsList[$i]['waiting'] = $row['waiting'];

			$i++;
		}

		return $filmsList;


 Предполагаю, что нужно использовать Union. Но мне нужно узнать о совпадении и вывести пользователю не посмотреть позже, а подписан.

SELECT * FROM films  UNION SELECT * FROM see_later WHERE see_later.film_id = films.id LIMIT 10


Основная проблема, в том что получая многомерный массив, я хотел бы получить дополнительное несуществующее поле 'subscribe', то есть когда буду выводить результаты через цикл, смотреть поле 'subscribe' 1 или 0.
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Может так вам нужно?
SELECT f.* , sl.id as subscribe
FROM `films` f
LEFT JOIN `see_later` sl 
ON sl.film_id = f.id
WHERE sl.user_id = :user_id //подставить ид пользователя
ORDER BY `year` DESC LIMIT 10


PS: в помощь по запросам
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vaflya
@vaflya Автор вопроса
Ничего личного, это всего лишь хобби.
SELECT f.* , sl.id as subscribe
FROM `films` f
LEFT JOIN `see_later` sl 
ON sl.film_id = f.id
ORDER BY `year` DESC LIMIT 10


Вообщем ответ на мой вопрос, выводит 10 фильмов и помечает, те на которые подписан юзер.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы