2016-03-06 8 views
0

Мне нужно разработать простую страницу поиска, которая соответствует строке поиска с полем в таблице MySQL.Запрос MySQL для фильтрации записей, содержащих любое из слов в строке поиска

Предположим, что таблица базы данных является «записями» и полем является «record_title». Также скажите следующее: «record_titles» в строках.

word1 word2
word1 word3 word4
word5 word2 word1
word6

Теперь в форме поиска, скажем, пользователь представить поисковые термины, например 'word1 word7', 'word1', 'word1 word5', «word1 word2» и т. д., он должен возвращать записи, имеющие хотя бы одно из слов в поисковом выражении. Он не должен брать строку поиска в качестве подстрок, например, если поисковый термин «слово», он не должен возвращать какие-либо записи в указанном выше наборе записей.

Я пробовал со следующим, но иногда не совпадают с одним словом.

MATCH(`recordTitle`) AGAINST ('+word1 +word2' IN BOOLEAN MODE); 

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

спасибо.

GUIR

+0

В каком формате у вас есть ключевые слова для поиска или вы получаете одну строку, который нужно найти, или вы получаете одну строку, имеющую несколько слов delimmited с промежутками между ними @GUIR ??? –

+0

Извините, разрывы строк здесь были омрачены. – GUIR

+0

Выполнено :), каждая строка представляет запись в строке – GUIR

ответ

0

Предположим, у вас есть строка для поиска:

variableToBeSearched = 'word word2 word3'; 

Прежде всего, вам придется разбить его на массив с разделителем ПРОСТРАНСТВА (в зависимости от языка, который вы используете с MySQL). Так что:

Array[0] = 'word' 
Array[1] = 'word2' 
Array[2] = 'word3' 

Затем перебирать массив и построить строки запроса.

string Query = "SELECT * FROM records WHERE "; 
if(Array.Length != 0) 
{ 
    For(i=0; i<Array.Length; i++) 
    { 
     if(i != (Array.Length-1)) 
     { 
      Query += "record_title LIKE '%" + Array[i] + "% ' OR "; 
     } 
     else 
     { 
      Query += "record_title LIKE '%" + Array[i] + "% '"; 
     } 
    } 
} 
else 
{ 
    // No words found in the String :-) 
} 

И затем выполните QUERY. Пожалуйста, сообщите, нужно ли очистить какое-то понимание с моей стороны.

+0

Поскольку я не знаю конкретного языка, который вы используете с MySQL, поэтому я написал Psuedo-Code. @GUIR –

+1

Спасибо. Это работает. Но в моем случае мне не нужно искать строку в качестве подстроки записи базы данных. Он должен совпадать только с одним или несколькими полными словами (словами), а не подстроками слов в записи db. Например, скажем, термин поиска «супер», если у нас есть слово «supersede» в базе данных, оно должно соответствовать строке поиска. Но если в базе данных есть запись «супер проводник», ее следует сопоставить, поскольку здесь «супер» является полным словом, а не подстрокой. – GUIR

+0

Я понял. Позвольте мне кое-что прояснить. Кто вводит данные COLUMNS record_title в ТАБЛИЦЕ @GUIR. Если вы сделаете это вручную, введите слова в COLUMN вручную, как «супер проводник» и «заменить».Запишите пробел в конце каждой строки (даже SPACE после последнего слова в строке). Затем ОБНОВЛЯЙТЕ запрос ANSWER с ** Query + = "record_title LIKE '%" + Array [i] + "%'"; ** с пробелом в конце. –

1

На самом деле вы можете использовать оператор sql in - http://www.w3schools.com/sql/sql_in.asp и функцию php implode, чтобы сделать строку с разделителями-запятыми для использования в вашей строке sql.

$searchArr = implode(', ', $arraySearch); 
$sql = "select * from records where record_title in ($searchArr);"; 
+0

Он хочет искать строки, разбитые с помощью SPACE, внутри каждой строки массива., Так что LIKE обязательно –

+0

Спасибо. Я объясню дальше, но позже. Пожалуйста, смотрите комментарии для @MalikAsif ниже. – GUIR

 Смежные вопросы

  • Нет связанных вопросов^_^