Я хотел выбрать подмножества с сопоставлением с
SELECT * FROM (
SELECT * FROM Movie WHERE
MATCH(keywords) AGAINST('$mk')
)
WHERE MATCH(genres) AGAINST('$mg')
$ mk может быть «боевик, триллер» $ ключевыми словами может быть «герой, оружие, лес»
Это не похоже на работу, или я могу что-то не так делать ..
Оба запроса возвращают значения.
Когда я комбинирую сопоставление запросов с оператором AND, это также работает.
я пытаюсь добиться, чтобы получить набор из фильмов в соответствии с ключевыми словами, то
получить набор из этого подмножества с совпадающими жанрами .. и, если возможно, это будет продолжаться еще для некоторых ключей ..
Или есть лучшее, более быстрое, более модульное решение для этого?
У меня возникают трудности с пониманием соединений, я думаю, что они могут быть лучшим решением, но я не знаю ..
С уважением
Производительность индексации вашего текущего метода будет исключительно низкой.
Вместо этого создайте временную таблицу, индексируйте ее и полный текст к ней.
CREATE TEMPORARY TABLE `temp_movie`
SELECT * FROM Movie WHERE
MATCH(keywords) AGAINST('$mk');
ALTER TABLE `temp_movie` ADD FULLTEXT INDEX(genres);
SELECT * FROM `temp_movie`
WHERE MATCH(genres) AGAINST('$mg')
И это должно работать быстрее. В зависимости от ситуации вы можете использовать временные таблицы и управлять их кэшированием.
В конце концов мне удалось получить результаты, но только в phpMyAdmin;
пример кода выглядит следующим образом
CREATE TEMPORARY TABLE `temp_movie` ENGINE=MyISAM
SELECT * FROM Movie WHERE MATCH(keywords) AGAINST('$mk');
ALTER TABLE `temp_movie` ADD FULLTEXT INDEX(genres);
CREATE TEMPORARY TABLE `temp_movie2` ENGINE=MyISAM
SELECT * FROM `temp_movie` WHERE MATCH(genres) AGAINST('$mg');
ALTER TABLE `temp_movie2` ADD FULLTEXT INDEX(director);
SELECT * FROM `temp_movie2` WHERE MATCH(director) AGAINST('$md');
1- Я получаю соответствующие ключевые слова для другой временной таблицы1
2- Я получаю подходящие жанры для другой временной таблицы 2 из таблицы 1
3- Я получаю соответствующих директоров в виде списка из таблицы 2
Работает в тесте SQL-запроса в phpMyadmin НО
if($result = $conn->query($simquery)){
while($similar_movie = $result->fetch_assoc()) {
echo $similar_movie["original_title"]."<br>";
echo "test";
}
}
Не буду ничего делать ..?!? теперь я думаю, что это вопрос PHP, но кто-нибудь может сказать, что не так?
Regrads
Наконец-то мне это удалось ..
Создано 3 временных таблицы с различными вариантами выбора, выбранными MATCH AGAINST
ОБЪЕДИНИТЬ эти временные таблицы по идентификатору и сумме баллов
Выберите лучшие совпадения из финальной таблицы времен :))
Вот код и спасибо всем, кто помог ..
$simquery = "create temporary table t1
SELECT *, MATCH(keywords) AGAINST('$mk') as score from Movie ORDER BY score DESC;
";
$simquery2 = "create temporary table t2
SELECT *, MATCH(genres) AGAINST('$mg') as score from Movie ORDER BY score DESC;
";
$simquery3 = "create temporary table t3
SELECT *, MATCH(overview) AGAINST('$mo') as score from Movie ORDER BY score DESC;
";
$simfinal = "SELECT *, sum(score) FROM
(
SELECT * FROM t1
UNION
SELECT * FROM t2
UNION
SELECT * FROM t3
) as tmp
WHERE tmdb_id != ".$id." GROUP BY id ORDER BY score DESC LIMIT 30;
";
$conn2->query($simquery);
$conn2->query($simquery2);
$conn2->query($simquery3);
$result = $conn2->query($simfinal);