Mysql-Как обеспечить количество полученных аналогичных записей? - PullRequest
1 голос
/ 06 февраля 2011

Я работаю над сайтом, который показывает видео, похожие на YouTube. На этом веб-сайте есть раздел, в котором показаны десять самых похожих видео, в которых использовался поиск FULL TEXT для поиска похожих.

SELECT * , MATCH (`title` , `description`,`videokey` ) AGAINST ('$Keywords') AS score
FROM video
WHERE MATCH (`title` , `description`,`videokey` ) AGAINST ('$Keywords')
LIMIT 10

Проблема в том, что иногда получается менее 10 видео. В этом случае, когда есть менее 10 связанных видео, есть ли способ заставить его иметь 10 видео, которые точно не связаны? Если нет, возможно ли получить 10 по другому запросу SELECT на основе другого поля, такого как категория. Как я могу сделать это самым лучшим и быстрым способом?

1 Ответ

1 голос
/ 06 февраля 2011

Не совсем - ваш запрос должен оценить условное выражение для всех строк-кандидатов, прежде чем он будет иметь некоторое представление о том, сколько строк будет возвращено, следовательно, число возвращаемых строк не может быть использовано в качестве аргумента условного выражения в этом запросе.

Вы могли бы сделать две вещи (ну, вероятно, больше, но вот две):

  • Просто выполнить второй запрос в вашем коде, когда строки результата меньше 10.
  • Получите еще десять записей во втором запросе, который добавляется к вашему первому запросу через UNION.http://dev.mysql.com/doc/refman/5.1/en/union.html В вашем коде просто ограничьте свою итерацию по результатам жесткой 10, а не размером строки результата.

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

...