Извлечь конкретные слова из текстового поля в MySQL - PullRequest
0 голосов
/ 03 марта 2011

У меня есть таблица с текстовым полем, в зависимости от строки в ней содержится от 3 до 4 предложений.

Теперь я делаю html-объект автозаполнения, и я хотел бы начать вводить начало слова и чтобы база данных возвращала слова, начинающиеся с этих букв, из текстового поля базы данных.

Пример текстового поля: мне нравятся рыбные палочки, рыбные шарики тоже хороши

в моем автозаполнении, если бы я набрал "fish", он предложил бы "fishsticks" и "fishhat"

Все работает, кроме запроса.

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

select data_txt from mytable match(data_txt) against('fish', IN BOOLEAN MODE) limit 10

Я знаю, что это грязно, но я не могу переставить базу данных.

Спасибо за помощь!

EDIT:

Вот что я получил, благодаря Бренту Уордену, он не чистый, но работает:

SELECT DISTINCT
SUBSTRING(data_txt, 
LOCATE('great', data_txt),
LOCATE(' ' , data_txt, LOCATE('great', data_txt)) - LOCATE('great', data_txt)
)
 FROM mytable WHERE data_txt LIKE '% great%'
LIMIT 10

есть идеи, как не использовать одно и то же выражение LOCATE снова и снова?

Ответы [ 2 ]

0 голосов
/ 30 января 2013
$tagsql ="SELECT * from mytable";
$tagquery = mysql_query($tagsql);

$tags = array(); //Creates an empty array

while ($tagrow = mysql_fetch_array($tagquery)) {

   $tags[] = tagrow['tags']; //Fills the empty array

}

Если строки содержат запятые, которые вы можете использовать -

 $comma_separated = implode(",", $tags);

, вы можете заменить запятую для пробелов, если они разделены пробелами в вашей таблице.

$exp = explode(",", $comma_separated);

Если вы хотите, чтобы ваши данные были уникальными, вы можете включить следующее:

$uniquetags = array_unique($exp, SORT_REGULAR);

вы можете использовать print_r, чтобы увидеть результаты массива, полученные в результате

Здесь array_merge используется, потому что $ rt не будетотображается, если вы используете автозаполнение 'jquery', иначе $ rt может работать и array_merge можно игнорировать.Однако вы можете использовать array_merge для включения нескольких таблиц, повторяя предыдущий процесс.

$autocompletetags = array_merge((array)$uniquetags);

Это сортирует значения в алфавитном порядке

sort($autocompletetags, SORT_REGULAR);
0 голосов
/ 03 марта 2011

Используйте LOCATE, чтобы найти вхождение слова.

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

USE SUBSTR и предыдущие 2 LOCATE возвращаемые значения для извлечения всего слова.

HTH.

...