Точно търсене в mysql

webdeveloper

Registered
Нещо не мога да се оправя с този "LIKE". Да речем, че имам това:

PHP:
$data = mysql_query("SELECT * FROM table WHERE zaglavie LIKE '%$text%'");


Сега да предположим, че имам подобен запис в table:

Dnes hodih na more - i beshe mnogo qko

Ако в търсачка напиша напиша:

Dnes hodih na more - i beshe mnogo qko

Ще ми намери резултата, но ако изпиша:

Dnes hodih na more i beshe mnogo qko

Без тирето, не иска да ми го изкара, което е много тъпо, направо се нервирам. Няма ли някакъв вариант за търсене, които да разделя стринга на думи и да търси резултати със съвпадения за всяка една дума след което да ги изкарва. Така според мен ще имам по-точно търсене...
 
Сам го каза. Разделяш стринга на думи. В момента ти търси в полето дали има съвпадение, но как. Това което си въвел търси не надали думите съществуват, а дали цялото ти изречение съществува. Нормално е да не го намери.
PHP:
$string = 'Dnes xodix na more - i beshe mnogo qko';
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'$val' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -18);
mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE " . $search . "");
:?:
 
PHP:
$string = 'Dnes hodih na more i beshe mnogo qko';
$words = explde(' ', $string);
foreach($words as $word) {
$word = $words;
echo $word;
}
Хрумна ми това, но най вероятно е голяма простотия и няма да стане. :D

ЕДИТ: БРЕЙ! Бил съм близко! :D
 
Още по-точно:

PHP:
$search .= "'$val' OR `zaglavie` LIKE ";

Знакът % преди и след променивата търси без точност за първата и последната буква.
 
rombeca каза:
Още по-точно:

PHP:
$search .= "'$val' OR `zaglavie` LIKE ";

Знакът % преди и след променивата търси без точност за първата и последната буква.
Напълно си прав, не бях се замислил. Когато се разделя стринга е на думи няма смисъл от тези %. :?:
 
Ev0luti0N каза:
Сам го каза. Разделяш стринга на думи. В момента ти търси в полето дали има съвпадение, но как. Това което си въвел търси не надали думите съществуват, а дали цялото ти изречение съществува. Нормално е да не го намери.
PHP:
$string = 'Dnes xodix na more - i beshe mnogo qko';
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'$val' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -18);
mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE " . $search . "");
:?:


Странно, но така ми вади, че няма резултати...
 
webdeveloper каза:
Ev0luti0N каза:
Сам го каза. Разделяш стринга на думи. В момента ти търси в полето дали има съвпадение, но как. Това което си въвел търси не надали думите съществуват, а дали цялото ти изречение съществува. Нормално е да не го намери.
PHP:
$string = 'Dnes xodix na more - i beshe mnogo qko';
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'$val' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -18);
mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE " . $search . "");
:?:


Странно, но така ми вади, че няма резултати...
Добре де, направи едно echo $search под $search, за да видиш какво ти изкарва.
 
webdeveloper каза:
Изкарва го както трябва, но накрая завършва със:

OR `zaglavie` LIKE

След края на всички думи завършва без стойност и от там май идва проблема?
Пред OR не ти ли изкарва някаква стойност?
 
Ev0luti0N каза:
webdeveloper каза:
Изкарва го както трябва, но накрая завършва със:

OR `zaglavie` LIKE

След края на всички думи завършва без стойност и от там май идва проблема?
Пред OR не ти ли изкарва някаква стойност?

Пред OR са всички думи разделени, но накрая завършва без стойност...

'dnes' OR `zaglavie` LIKE 'hodih' OR `zaglavie` LIKE 'na' OR `zaglavie` LIKE 'more' OR `zaglavie` LIKE 'i' OR `zaglavie` LIKE 'beshe' OR `zaglavie` LIKE 'mnogo' OR `zaglavie` LIKE 'qko' OR `zaglavie` LIKE
 
Код:
$string = 'Dnes xodix na more - i beshe mnogo qko';
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'$val' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -20);
mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE " . $search . "");
:?:
 
Или така:

$string = 'Dnes xodix na more - i beshe mnogo qko';
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'%$val%' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -20);
mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE " . $search . "");
 
palex каза:
Или така:

$string = 'Dnes xodix na more - i beshe mnogo qko';
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'%$val%' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -20);
mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE " . $search . "");
Прочети горе постовете.
Няма смисъл от тези %. То търси за думата, а не за цяло изречение. :?:
 
Аз го нацелих, точната стойност е -15, но пак изкарва, че няма резултати, което е много странно... :o
 
webdeveloper каза:
Аз го нацелих, точната стойност е -15, но пак изкарва, че няма резултати, което е много странно... :o
Дай си твоя код да го разгледаме. :idea:
 
Ev0luti0N каза:
palex каза:
Или така:

$string = 'Dnes xodix na more - i beshe mnogo qko';
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'%$val%' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -20);
mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE " . $search . "");
Прочети горе постовете.
Няма смисъл от тези %. То търси за думата, а не за цяло изречение. :?:

Прав си :?
 
PHP:
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'$val' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -15);
//echo $search;
$data = mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE $search");		


$rezultati = mysql_num_rows($data);
if($rezultati == NULL || $rezultati == 0){
	echo '<center>Търсенето на <b>'.$string.'</b> не откри резултати.</center>  ';
}else{
echo " <center>Намерени са <b> $rezultati </b> резултата на <b> $string </b></center> <br> ";

while($row = mysql_fetch_array($data)){


И надолу вече си изваждам и офoрмям резултатите...
 
webdeveloper каза:
PHP:
$ex = explode(' ', $string);
foreach ($ex as $val)
{
$search .= "'$val' OR `zaglavie` LIKE ";
}
$search = substr($search, 0, -15);
//echo $search;
$data = mysql_query("SELECT * FROM `table` WHERE `zaglavie` LIKE $search");		


$rezultati = mysql_num_rows($data);
if($rezultati == NULL || $rezultati == 0){
	echo '<center>Търсенето на <b>'.$string.'</b> не откри резултати.</center>  ';
}else{
echo " <center>Намерени са <b> $rezultati </b> резултата на <b> $string </b></center> <br> ";

while($row = mysql_fetch_array($data)){


И надолу вече си изваждам и офoрмям резултатите...
Невъзможно е $search = substr($search, 0, -15); да ти бъде 15 трябва да е 20!
PHP:
$search = substr($search, 0, -20);
Като е на 20 каква грешка ти изкарва? :idea:
 
15 Трябва да е човек, иначе ако напиша само една дума, то ми я вади така


Вместо

'hodih'

И въобще като цяло ако е с -20 не излизат точно, а с -15 всичко е ок.

Забелязвам и следната грешка в error loga...

PHP Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ...\..\...\...\test.php on line 689

Оная точка дето си я блъснал пред "'$val' OR ... ме съмнява. Като цяло тоя substr май е излишен, но все пак това не спира логването на по-горната грешка и съответно безрезултатното търсене.
 

Back
Горе