SQL заявка да търси по дума в изречение от базата данни

uphero

Registered
Трябва да изведа резулати който съдържат дадена дума пример:
[css]
продавам тикви
обичам да ям тикви
обичам да ям диня
колко струва тези тикви [/css]

при търсене на тикви да изведе само :

[css]продавам тикви
обичам да ям тикви
колко струва тези тикви [/css]

Става дума за търсене в резултати на кирилица. Дали LIKE е подходящо,защото в момнета не вади точни резултати?
 
Научете се да давате и това, което правите вие. Т. е. дай си заявката, може в теб да е проблема, а ако не е то погледни за regex в mysql.
 
Това се прави с like:
[sql]select `id`,`text` from `table` where `text` like '%тикви%'[/sql]
 
3a точна дума търси с regexp boundary:

[sql]
CREATE TABLE T1(S VARCHAR(255));

INSERT INTO T1 VALUES(
'продавам тикви'),
('обичам да ям тикви'),
('обичам да ям диня'),
('колко струва тези тикви'),
('колко струват тиквите ?');

SELECT * FROM T1 WHERE S REGEXP '[[:<:]]тикви[[:>:]]';
[/sql]
mysql> CREATE TABLE T1(S VARCHAR(255));
Query OK, 0 rows affected (0.09 sec)

mysql>
mysql> INSERT INTO T1 VALUES(
-> 'продавам тикви'),
-> ('обичам да ям тикви'),
-> ('обичам да ям диня'),
-> ('колко струва тези тикви'),
-> ('колко струват тиквите ?');
Query OK, 5 rows affected (0.04 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql>
mysql> SELECT * FROM T1 WHERE S REGEXP '[[:<:]]тикви[[:>:]]';
+---------------------------------------------+
| S |
+---------------------------------------------+
| продавам тикви |
| обичам да ям тикви |
| колко струва тези тикви |
+---------------------------------------------+
3 rows in set (0.00 sec)
like ще хване и "тиквите"
 
PHP:
function search_keywords($string){
$keywords = preg_replace("/[^a-zA-Z\p{Cyrillic}0-9]/u"," ", $string);
$keywords = preg_replace("/(\s){2,}/", '$1', $keywords);
$keywords = preg_replace($removeArray, ' ', $keywords);
$keywords = trim($keywords);
$keywords = '+'.$keywords;
$keywords = str_replace(' ',' +',$keywords);
return $keywords;
}

$search_keys = search_keywords($string);

Код:
SELECT col1, col2, MATCH (kolona_ot_bd) AGAINST ('$search_keys' IN BOOLEAN MODE) AS score FROM table WHERE MATCH (kolona_ot_bd) AGAINST ('$search_keys' IN BOOLEAN MODE) ORDER BY score DESC
Успех :?:
 

Back
Горе