[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Mysql regexp как узнать совпадение?
mrmaloy
Очень хотелось бы узнать как получить совпадение по которому MySql выбрал данные, есть различные варианты поиска в стиле regexp, но что-то не где не описано как получить само совпадение. т.е. например
если искать функцией REGEXP 'test|word|hello'
то как узнать что Hello World мы получили именно из за hello.

Прошу прощения, если не понятно написал.

Есть таблица
id title
1 Test text
2 Thats is word
3 Hello World

Как составить запрос с регулярным выражением например SELECT * FROM table WHERE title REGEXP 'hello|anything|just' так что-бы потом было ясно что
строка
id title
3 Hello World
выбралась по совпадению со словом hello из pattern('hello|anything|just')

например
id title match
3 Hello World hello




Спустя 2 дня, 15 часов, 17 минут, 8 секунд (10.01.2011 - 19:36) mrmaloy написал(а):
Неужели никто ничего об этом не знает?

Спустя 3 минуты, 40 секунд (10.01.2011 - 19:40) Dron19 написал(а):
Знают тут все что нужно на форму, тут люди сидят грамотные и знающие свое дело, просто нужно немного корректней выражать мысли, я 3 раза прочитал и ничего не понял

Спустя 6 минут, 5 секунд (10.01.2011 - 19:46) Invis1ble написал(а):
Dron19
не знаю... я допустим понял мысль автора, все нормально он выразился.. Просто я например не знаю решения, поэтому ничего не отвечаю =)

mrmaloy
покури мануал мускульный, наверняка там есть ответ.
Если найдешь решение, отпишись, мне тоже интересно )

Спустя 50 секунд (10.01.2011 - 19:47) quickxyan написал(а):
а шо тут неясного - просто есть наример 3 варианта для совпадений и по какому-то из них совпадает что-то в БД. он хочет узнать по какому именно из вариантов было найдено совпадение)

Спустя 4 минуты, 24 секунды (10.01.2011 - 19:51) Dron19 написал(а):
Наверное я дибил wink.gif

Спустя 13 минут, 33 секунды (10.01.2011 - 20:05) Dron19 написал(а):

$result = mysql_query("SELECT * FROM myFuckinTable") or mysql_error();
$fetch = mysql_fetch_array($result);
$preg = preg_match("/(hello)/i",$fetch['title']);
if($preg)
print "True";
else print mysql_error();

Только при нахождении, то есть когда вернет true в условии, напишешь то, что тебе нужно, да и код напишешь нормально, а то это я так чисто для проверки набрал

Спустя 2 минуты, 42 секунды (10.01.2011 - 20:08) Dron19 написал(а):
у меня вернул true, когда в столбце была надпись Hello World, думаю я правильно тебя понял и написал то, что тебе нужно

Спустя 1 минута, 7 секунд (10.01.2011 - 20:09) Dron19 написал(а):
думаю такой алгоритм тебе подойдет

Спустя 25 минут, 41 секунда (10.01.2011 - 20:34) Invis1ble написал(а):
Dron19
ты так и не понял задачу. Прочти еще раз первый пост, автор его отредактировал =)

Спустя 1 минута, 10 секунд (10.01.2011 - 20:36) mrmaloy написал(а):
Dron19
К сожалению нет. Все проверки должны быть в самом запросе т.к. pattern может быть длинной до 300!!! слов а база может быть и в 5 тысяч записей, соответсвенно полная выборка из базы просто убьет сервер.

Спустя 1 минута, 26 секунд (10.01.2011 - 20:37) Invis1ble написал(а):
mrmaloy
Так и не нашел ничего?

Спустя 1 минута, 25 секунд (10.01.2011 - 20:38) mrmaloy написал(а):
Invis1ble
К сожалению нет =(

Спустя 22 минуты, 21 секунда (10.01.2011 - 21:01) Dron19 написал(а):
а как ты закинешь работу функции в запрос? У тебя по-любому будет ошибка

Спустя 57 секунд (10.01.2011 - 21:02) mrmaloy написал(а):
Dron19
Какую работу какой функции?

Спустя 5 минут, 35 секунд (10.01.2011 - 21:07) Dron19 написал(а):
ну регулярного выражения, ты вообще как совпадения проверяешь, вводишь значение из формы и ищешь его в каком-то поле бд? Если да, то можно сделать все по-другому

Спустя 7 минут, 14 секунд (10.01.2011 - 21:15) mrmaloy написал(а):
формы не использую, просто генерируется регулярка простенькая с вариантами слов по которой потом выбираем из таблицы строки в которых column - пусть будет text совпадает с любым из слов, нужно узнать с каким именно словом совпало

Спустя 4 минуты, 33 секунды (10.01.2011 - 21:19) SlavaFr написал(а):
а на зачем это надо? не проще ли сразу задавать такие запросы, чтоб было сразу понятно что найденно?

например:
SELECT ....
case
when
title like '%hello%' then 'hello'
when title like '%anything%' then 'anything'
when title like '%just%' then 'just'
end as chto
FROM table ...


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

Спустя 10 минут, 2 секунды (10.01.2011 - 21:29) mrmaloy написал(а):
На первый взгляд это мне поможет, сейчас углубимся в исследования =)
остается только вопрос:
если вариантов case около 300 не повиснет ли сервер?

Может стоит упомянуть что я ищу функционал круглых скобок preg_match'a в MySql =)
mreg_match('(he)llo', $where, $arr);
$arr = array(
[0]=>hello
[1]=>he << хотелось бы всетаки так же получать совпадение =)

Спустя 1 час, 38 минут, 48 секунд (10.01.2011 - 23:08) kirik написал(а):
mrmaloy
используйте sphinx


_____________
<td></td>...<td></td>...<td></td>... тихо стучали колеса поезда в ночной тишине.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.