SQL-запрос, такой как stackoverflow - PullRequest
       4

SQL-запрос, такой как stackoverflow

2 голосов
/ 02 сентября 2011

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

Например,

SQL search query like stackoverflow

Я хочучтобы найти наиболее релевантные статьи, связанные с этим названием.

Я знаю, что это что-то вроде:

WHERE article_title LIKE 'word'

но как мне обрабатывать несколько ключевых слов?

Ответы [ 3 ]

5 голосов
/ 02 сентября 2011

Используйте полнотекстовый индекс, который будет выглядеть примерно так:

SELECT ... FROM ... WHERE MATCH (fieldname) AGAINST ('keyword keyword keyword');

Или взломайте запрос, чтобы он выглядел как

SELECT ... FROM ... WHERE (fieldname LIKE '%keyword%' OR fieldname LIKE '%keyword%' etc...)

Из этих двух полнотекстовая версия будет быстрее, поскольку она может использовать индекс. Версия 'LIKE %...% будет очень дорогой, так как поиск с подстановочными знаками такого типа вообще не может использовать индексы. Недостатком является то, что полнотекстовые индексы доступны только для таблиц MyISAM и, вероятно, никогда не будут доступны для таблиц InnoDB.

2 голосов
/ 02 сентября 2011

Вы должны иметь полнотекстовый поиск для этого.

Убедитесь, что вы используете MyISAM в качестве движка для таблицы, по которой вы хотите искать.

Иметь следующую таблицу

Table articles
--------------
id integer autoincrement PK
title varchar(255) with fulltext index
contents textblob with fulltext index

И использовать запрос вроде:

SELECT id
  , MATCH(title, contents) AGAINST ('$title_of_article_thats_being_edited') 
  as relevance
FROM articles
WHERE MATCH(title, contents) AGAINST ('$title_of_article_thats_being_edited') 
ORDER BY relevance

Обратите внимание, что SO уточняет список при вводе тегов.

0 голосов
/ 02 сентября 2011

WHERE article_title LIKE '%word1%word2%'

вернет все строки, в которых article_title содержит 'word1' и 'word2' в этом конкретном порядке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...