Хорошо, у меня есть две таблицы информации: фильмы и история. В моих фильмах db есть вся информация о фильмах. Это строки в фильмах: id, title, photo, destination, description, rating, length, likes.
В моей истории db есть вся информация о том, какие фильмы пользователь нажал. Это строки в истории: id, user_id, movie_id.
Вопрос
Я работаю над функцией «Моя история». Как показать свою историю, но также получить информацию из фильмов в одном запросе SQL?
Например:
$db->query("SELECT * FROM movies ORDER BY TABLE history WHERE user_id='$id'");
Прошу прощения, если ответ кажется простым. Это мой первый год работы с программированием в целом. Спасибо за любую помощь.
Ваш запрос:
SELECT * FROM movies m INNER JOIN history h ON h.movie_id = m.id WHERE h.user_id = $id ORDER BY h.id --not sure what you want to order by, but it goes here
При этом вам нужно знать о SQL Injection. Вы должны использовать подготовленные инструкции, а не просто добавлять переменные непосредственно в свой запрос.
У вас есть некоторая ошибка в запросе SQL. Я думаю, вы можете попробовать: (в Mysql) SELECT movies.* FROM history INNER JOIN movies ON history.movie_id = movies.id WHERE user_id = $id
Вы ищете JOIN
в MySQL. Вы хотите сделать что-то похожее на это:
SELECT * FROM movies m JOIN history h ON m.id=h.movie_id AND h.user_id = $id ORDER BY <column name>;
Основная концепция этого JOIN
заключается в том, что вы берете первичный ключ из фильмов (id) и присоединяетесь к соответствующему иностранному ключу в истории (movie_id).
Также стоит отметить, что JOIN
, CROSS JOIN
и INNER JOIN
являются синтаксическими эквивалентами в MySQL.
Поскольку вы только начинаете свой первый год в программировании, я настоятельно рекомендую заглянуть в документацию по JOIN
и полностью понять ее самостоятельно, а не копировать и вставлять ответ, который работает здесь. Это будет полезно для вас в долгосрочной перспективе! См. Документацию MySQL по синтаксису JOIN
.