|
|
|
| Вот запрос
$query="select * from catalog where name REGEXP '$search_texto' or description REGEXP '$search_texto' or made REGEXP '$search_texto' ";
есть позиция к примеру в столбике description "Книжка по PHP для сумасшеднших"
если делаю запрос "книж" -находит как нужно а если делаю запрос "книж сум" - не ищет нифига. Как сформировать запрос таким способом, что бы работало и по первому и по второму варианту
? Спасибо! | |
|
|
|
|
|
|
|
для: virtus
(12.04.2006 в 11:39)
| | книж сум - это не регулярное выражение. Точнее, оно, конечно, регулярное, но ничего кроме "книж сум" искать не обучено.
Заставлять учить пользователей язык регулярных выражений - редкостный садизм. | |
|
|
|
|
|
|
|
для: Trianon
(12.04.2006 в 12:16)
| | я знаю, что пользователей не нужно ничему учить, мне нужно просто что бы мой запрос сам обрабатывал как нужно. Знаешь как помочь, нет? | |
|
|
|
|
|
|
|
для: virtus
(12.04.2006 в 12:33)
| | Поскольку Вы довольно туманно описали "как именно нужно", то конечно, не знаю, а могу лишь догадываться. Имеет смысл применить полнотекстовый поиск. | |
|
|
|
|
|
|
|
для: Trianon
(12.04.2006 в 12:42)
| | в теме ясно указанно каким способом нужно делать поиск!
мне нужно, что бы если пользователь задал поиск по словосочетанию "вод стол" нашло "водку столичную"
ясно, нет? | |
|
|
|
|
|
|
|
для: virtus
(12.04.2006 в 13:07)
| | разбираете фразу на отдельные слова и ищите каждое слово как LIKE 'слово%' | |
|
|
|
|
|
|
|
для: Loki
(12.04.2006 в 13:34)
| | спасибо Loki
Тогда выйдет, что найдет везде и по одному слову - ведь так! это не есть верный путь...
а можно пример как разбивать на слова и искать? | |
|
|
|
|
|
|
|
для: virtus
(12.04.2006 в 13:42)
| | Для этого можно воспользоваться либо функцией explode()
<?php
$str = "Книжка по PHP для амбулаторных";
$arr = explode(" ",$str);
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
|
либо при помощи регулярных выражений и функции preg_split()
<?php
$str = "Книжка по PHP для выздаравливающих";
$arr = preg_split("|[\s]+|",$str);
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: virtus
(12.04.2006 в 13:42)
| |
<?php
$str = "Книжка по PHP для амбулаторных";
$arr = explode(" ",$str);
$quer="pole LIKE '".implode("%' AND pole LIKE '", $arr)."%'";
$sql="SELECT * FROM table WHERE $quer";
|
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Loki
(12.04.2006 в 14:56)
| | Спасибо.
Но все равно не пойму... в том, что Локи привел примере - по одной ячейке только ищет? нужно мне по трем...
а вот то что Чупс привел (СПАСИБО) запрос разбивается по словам в массив... так как мне мой запросище вставить в данный массив ? | |
|
|
|
|
|
|
|
для: virtus
(12.04.2006 в 17:05)
| |
<?php
$str = "Книжка по PHP для амбулаторных";
$arr = explode(" ",$str);
$quer="pole LIKE '".implode("%' AND pole LIKE '", $arr)."%'";
$sql="SELECT *, CONCAT(name, description , made) as pole FROM table WHERE $quer";
?>
|
Впрочем, алиас во WHERE может и не пойти... | |
|
|
|
|
|
|
|
для: Trianon
(12.04.2006 в 17:18)
| | Скорее всего. Обработка, если не ошибаюсь, начинается все-таки в where...
Подождем что Чупс скажет:)) | |
|
|
|
|
|
|
|
для: Loki
(12.04.2006 в 17:52)
| | Можно поступить следующим образом
<?php
$str = "Книжка по PHP для амбулаторных";
$arr = explode(" ",$str);
foreach($arr as $word) $quer[] = "(name LIKE '%$word%' OR description LIKE '%$word%' OR made LIKE '%$word%')";
$sql = "SELECT * FROM table WHERE ".implode(" AND ", $quer);
echo $sql;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(13.04.2006 в 00:15)
| | Супер. Спасибо, чуток подправил только ;)
Спасибо, всем | |
|
|
|
|
|
|
|
для: virtus
(12.04.2006 в 11:39)
| | - | |
|
|
|