Почему не работает $result.=mysql_qwery...

OnSergey

Новичок
Почему не работает $result.=mysql_qwery...

Задача: В базе ищется несколько слов, затем все записи, содержащие одно или несколько искомых слов выводятся в HTML-таблицу. Пока задача упрощена (допуск повторов, нет анализа сочетаемости слов).

//фрагмент поиска по нескольким словам

$mass_words = explode(" ", $words);
while (list($k, $v) = each($mass_words))
{
if (strlen($v)>2) $result.=mysql_query("select * from table where word like '%".$v."%' order by relevant");

}

$num_result = mysql_num_rows($result);
=======================================================
Как истинный ЛЕНИВИЦ - хочу "скопить" весь $result и только потом его "дать на съедение" функциям sql-обработки. Но номер не проходит. Два часа поиска по разным manual и форумам - нигде не найти похожей ситуации.
:confused: Народ, помогите, please :confused:
 

Фанат

oncle terrible
Команда форума
хахахаха.
потому, что ты не понимаешь, что такое $result, с которым работаешь.
бегом в мануал читать, что это такое
 

que_bunt

Новичок
потому что $result это не строка.

-~{}~ 02.10.06 12:35:

упс, опоздал...
 

OnSergey

Новичок
:cool: потому что $result это не строка.

Это и ВАЛЕНКУ понятно. Однакож на $result.= - ошибок нет. А вот "инструмент" накапливания и последующей обработки - вот это то я и разыскивыаю ;)
 

MajestiC

Пых
Хохо, так раз это валенку понятно, чего сам не исправил?

"Однакож на $result.= - ошибок нет." - а почему они должны быть?

Накапливать надо не сслыки на результаты mysql запроса, а данные из запросов, которые тебе нужны.
 

que_bunt

Новичок
Однакож на $result.= - ошибок нет
этот оператор используеться только для обьединения строк, тоесть перед тем как происходит его действие $result приводиться к строковому типу! вот и нет ошибки.
 

Фанат

oncle terrible
Команда форума
OnSergey
Это и ВАЛЕНКУ понятно
Ну, до тебя даже и это не доходит. Так что до валенка тебе ещё расти и расти.

И лучше бы ты поискал инструмент объелдинения всех поисковых слов в один запрос, умник.
 

que_bunt

Новичок
А вот "инструмент" накапливания и последующей обработки - вот это то я и разыскивыаю
в принципе можешь сделать так: $result[] = mysql_query
если понимаешь как потом обработать масcив $result
 

Фанат

oncle terrible
Команда форума
последняя фраза в моём комментарии - ключевая.
Обращать внимане надо на неё.

-~{}~ 02.10.06 14:18:

que_bunt
а вот это ты зря...
 

antson

Новичок
Партнер клуба
можно что типа такого
$mass_words = explode(" ", $words);
$query= 'Select * from table where 1=2 ';
while (list($k, $v) = each($mass_words))
{
if (strlen($v)>2) $query.=" union select * from table where word like '%".$v."%'";

}
$query.=" order by relevant";

а теперь уже запрос и фетч
 

Фанат

oncle terrible
Команда форума
antson
ты тоже подумай, и пойми, что ступил.

за юнион в ответах на форуме лично я бы расстреливал.
 

antson

Новичок
Партнер клуба
Фанат
а кто знает откуда и что у автора исходного вопроса
в relevant .
если просто поле в базе тогда однозначно or
а если это расчетная величина
то совсем другой коленкор .
например если слова в начале поисковой фразы более значимы.
то
"union select *, 10*".($числослов-$номер слова)." as revalent ...

можно же и считать сумму ревалентности всех найденых слов

тогда уже нужен union .
опять же если в поле word не поодному слову, то
уже union all.

Автор же писал Пока задача упрощена

-~{}~ 02.10.06 16:33:

Фанат
хотя вы тоже правы. при желании все можно сделать через или и case.
 

MajestiC

Пых
Вообще для такой задачи MySQL FULLTEXT поиск можно использовать.

Или OR-ы с LIKE на крайний случай.
 

OnSergey

Новичок
Автор оригинала: antson >>>$query.=" union select<<<
:confused: Можно ли "накапливать" $result - вопрос остался открытым. Antson, спасибо за идею другого способа (идея в подмене нового слова на фрагмент будущего запроса). Я так понимаю, народ советует взять OR, т.к. будет работать быстрее, чем UNION?!
==========================================
$mass_words = explode(" ", $words);
$query= 'Select * from table where 1=2 ';
while (list($k, $v) = each($mass_words))
{
if (strlen($v)>2) $query.=" OR word like '%".$v."%'";

}
$query.=" order by relevant";
$result=mysql_query($query);
$num_result = mysql_num_rows($result);
=========================================
А кто знает, сколько можно OR вкладывать? Ну не до бесконечности же!?
 

phprus

Moderator
Команда форума
OnSergey
До бесконечности.

А вообще почитай про полнотекстовый поиск (MySQL FULLTEXT) и используй его так как при большом кол-ве данный в таблице оператор like будет очень сильно тормозить. Это происходит в связи с тем, что при наличии символа % в начале условия не используются индексы, а производится просмотр всех записей таблици, а это очень долго.
 

Фанат

oncle terrible
Команда форума
antson
ПЕРВОЕ ПРАВИЛО ответов на форуме: делай лицо попроще.
Люди, которым нужен юнион, не задают идиотских вопросов про объединение результатов mysql_query
Понимаешь? Не надо думать, что все такие же умные, как ты, и кидаться изобретать паровую машину, по первому движению левой пятки клиента. Надо догадаться, что ему нужен ВЕЛОСИПЕД.

OnSergey
Можно ли "накапливать" $result - вопрос остался открытым.
Тем хуже для тебя. Сильно хуже.
И потому, что ты продолжаешь искать ответ на этот идиотский в своей постановке, вопрос, и потому, что до тебя не дошли те варианты, которые здесь предлагались, и потому, что ты продолжаешь считать это накопление решением своей проблемы. то есть, соотношение уровня твоих знаний и твоей уверенности в правильности твоего подхода очень нехорошее. Такие люди на этом форуме долго не задерживаются.

А вот по поводу лайка - это действительно странно, почему ты ищешь по базе слов с лайком. Очень сомнительно, что человеку, который ввёл слово "сад", нужно слово "засада".
 
Сверху