вопрос о запросе к базе данных

Статус
В этой теме нельзя размещать новые ответы.

ivashka

Полезный
Регистрация
16 Май 2007
Сообщения
151
Реакции
15
Есть в переменной слова через пробел, как мне осуществить запрос к базе, что бы выдавались только те позиции из базы, которыи имеют хоть одно слово из этой переменной.

Заранее благодарен.
 
PHP:
$sPerem='авыр агыр фавр';
echo $query = "SELECT id FROM table WHERE field LIKE '%". str_replace(" ", "%' OR field LIKE '%", $sPerem). "%'";
:D
 
разбиваешь строку в переменной на слова и через конструкции LIKE '%слово%' OR ... находишь нужное в базе
 
PHP:
SELECT * FROM m_lol WHERE lol_id IN ('bla-bla6','bla-bla5','bla-bla4','bla-bla3','bla-bla1','bla-bla2')
 
PHP:
SELECT * FROM m_lol WHERE lol_id IN ('bla-bla6','bla-bla5','bla-bla4','bla-bla3','bla-bla1','bla-bla2')
бестолковее запроса я ещё не встречал.
а если у тебя слова постоянно меняются?

PS вообщето ответ на вопрос был дан ещё во втором посте.
 
Почему-то не работает.
$q = "SELECT id FROM text WHERE tags LIKE '%". str_replace(" ", "%' OR tags LIKE '%", $sPerem). "%'";

text - таблица базы
tags - столбец с которым нужно сравнивать каждое слово

Что делаю не так?
 
Может быть надо text взять в обратные одиночные кавычки, что-то вроде `text` ?
 
ТС, у тебя список слов в переменной, а тебе нужно найти совпадения в базе с любым из слов внутри переменной?
если так то :

$words = "hello and fuck off";
$words = str_replace(" ", ",", $words);

$q = "select * from table where field in ($words)";
 
ivashka, Вы хотите только точные вхождения искать или ещё и словоформы типа: автомобиль, автомобилей , автомобилем...?
 
вот по быстрому из своего скрипта вырвал ... не самый короткий вариант (в следствие того что у меня еще каждое слово определенным образом обрабатывается), но работать точно будет =)

$str="слово1 слово2 слово3 словоN";

$words=explode(" ",$str);

$where=array();

for($i=0; $i<count($words); $i++)
{
$where[]="tags LIKE '%".$words[$i]."%'";
}

$where=join($where," OR ");

ну и запрос:

SELECT * FROM mytable WHERE $where;
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху