Итак, у меня есть 2 таблицы в одной базе данных, и они связаны друг с другом переменной. Как я могу получить часть информации из одной таблицы и использовать ее, чтобы выбрать из другой таблицы все, что имеет это значение?
$term = $_REQUEST["term"];
$films = array();
if (isset($term)) {
$sqlFilms = "SELECT * FROM films WHERE title LIKE '%" . $term . "%'";
} else {
$sqlFilms = "SELECT * FROM `films`";
}
$resultFilms = mysqli_query($link, $sqlFilms);
while ($row = mysqli_fetch_array($resultFilms, MYSQLI_BOTH)) {
$films[] = Array("id" => $row["id"],
"title" => $row["title"],
"poster" => $row["poster"],
"description" => $row["description"],
"director" => $row["director"]);
};
Этот код работает нормально, и я могу получить доступ ко всем «фильмам», в названии которых есть $ term. Но если я ищу жанр, который представляет собой другую таблицу, но имеет переменную с именем «film_id», которая равна «id» фильма, с которым он связан, я либо получаю все фильмы, либо не получаю никаких фильмов. Это код, чтобы попробовать фильм по жанрам.
$genreFilms = array();
$stuff = array();
if (isset($term)) {
$sqlGenreFilmIDs = "SELECT film_id FROM genres WHERE genre LIKE '%" . $term . "%'";
$resultGenres = mysqli_query($link, $sqlGenreFilmIDs);
$sqlGenreFilms = "SELECT * FROM films WHERE id LIKE '%" . $stuff["film_id"] . "%'";
} else {
$sqlGenreFilms = "SELECT * FROM `films`";
}
$resultGenreFilms = mysqli_query($link, $sqlGenreFilms);
while ($genrerow = mysqli_fetch_array($resultGenreFilms, MYSQLI_BOTH)) {
$genreFilms[] = Array("id" => $genrerow["id"],
"title" => $genrerow["title"],
"poster" => $genrerow["poster"],
"description" => $genrerow["description"],
"director" => $genrerow["director"]);
};






Если вы хотите ограничить поиск фильмов жанром, вам следует использовать sql join или подзапросы. Например,
$sqlGenreFilms = "SELECT * FROM films WHERE id in (SELECT film_id from genres WHERE genre LIKE '%" . $term . "%')"
Обратите внимание, что для более сложных запросов вам действительно следует изучить язык SQL и то, как он работает.
И в любом случае вам обязательно стоит прочитать, почему использование переменных в тексте запроса в кавычках, как вы, считается чрезвычайно вредным с точки зрения безопасности. Google для "sql-инъекции".
if (isset($term)) {
$sqlGenreFilms = "SELECT * FROM films WHERE id in (SELECT film_id FROM genres WHERE genre LIKE '%" . $term . "%')";
// if you want genre info and films info together use join
//$sqlGenreFilms = "SELECT genres.*, films.* FROM genres left outer join films on genres.film_id = films.id WHERE genres.genre LIKE '%" . $term . "%')";
} else {
$sqlGenreFilms = "SELECT * FROM `films`";
}
Можете одобрить мой ответ, если не возникнет вопросов .. :)
Спасибо! Я ценю внимание к чтению по SQL, я изучаю PHP, и мы просто нарушаем эту тему.