Заявка за търсене MySQL

Dodo1987

Registered
Здравейте

Занимавам се с една заявка за търсене, която нещо не работи както трябва.

Имам 2 полета в ДБ от които се търси.
В едното е марката на кола, а в другата модела.
И имам Mercedes - CL200

В момента ако в търсачката напиша: Mercedes - CL200
или Mercedes CL200, не открива нищо.
Ако ги напиша по отделно си ги изкарва правилно.

За сега заявката ми е -

Код:
"SELECT pole1,pole2 FROM `$table` WHERE status=1 AND (pole1 LIKE '%$search%' OR pole2 LIKE '%$search%' "

Може ли да ми кажете къде бъркам, примерен код или този да работи.
Благодаря
 
Код:
$sql = mysql_query("SELECT pole1,pole2 FROM `$table` WHERE status=1 AND (pole1 LIKE '%$search%' OR pole2 LIKE '%$search%' ") or die(mysql_error());
Дебъгвай си заявките. Я кажи така изкарва ли ти грешка ? :idea:
 
Проблема не е в това че заявката не се дебъгва или има грешка в нея. Работи си, не съм дал целия код а само селектването.
Интересува ме как да ги селектна и двете
 
Въртиш един цикъл с търсените думи и правиш заявка за всяка една от тях.
$word = "Mercedes CL200";
$explode = explode(" ",$word);
for($i = 0;$i < count($explode);$i++) {
mysql_query("SELECT pole1,pole2 FROM `$table` WHERE status = 1 AND (pole1 LIKE '%$explode[$i]%' OR pole2 LIKE '%$explode[$i]%')")or die(mysql_error());
}
 
Replace каза:
Въртиш един цикъл с търсените думи и правиш заявка за всяка една от тях.
$word = "Mercedes CL200";
$explode = explode(" ",$word);
for($i = 0;$i < count($explode);$i++) {
mysql_query("SELECT pole1,pole2 FROM `$table` WHERE status = 1 AND (pole1 LIKE '%$explode[$i]%' OR pole2 LIKE '%$explode[$i]%')")or die(mysql_error());
}

Хмм, така и предполагах че ще стане в цикъл.
А един допълнителен въпрос - това ще ми направи 2 заявки с резултати.
После как да изкарам резултатите в една таблица, след като са повече от една заявките с резултати. В случая са 2 но може и 3 да са.

Може ли идея как ще стане :wink:
 
Кода на @Replace е малко объркан. Ето как трябва да стане:
$word = "Mercedes CL200";

$word = trim($word); //Премахва интервали в двата края
$word = preg_replace('#\s{1,}#', ' ', $word); //Превръща няколко интервала в един

$explode = explode(" ",$word);

$sql = "SELECT pole1,pole2 FROM `$table` WHERE status = 1 AND (";

for($i = 0;$i < count($explode);$i++) {
if($i != 0) $sql .= " OR ";
$sql .= "(pole1 LIKE '%$explode[$i]%' OR pole2 LIKE '%$explode[$i]%')";
}

$sql .= ') LIMIT 20';
echo $sql;
#mysql_query($sql)or die(mysql_error());
Пробвай така, но горещо ти препоръчвам да използваш Boolean Fulltext search :?:
 
Наистина сега като погледна заявката е малко объркана ,или по-скоро доста недовършена. Ще ти се наложи още доста проверки да направиш ,преди да изведеш резултатите. Затова ,както каза @F1r3Fl3x използвай fulltext search ,хем ще ти е по-лесно , хем ще съкратиш значително кодът си. Ето ти едно примерче:
$word = "Mercedes CL200";
$explode = explode(" ",$word);
$query = mysql_query("SELECT `id`,`marka`,`model` FROM `wt` WHERE MATCH (`marka`,`model`) AGAINST ('".implode(" ",$explode)."' IN BOOLEAN MODE)")or die(mysql_error());
while ($search = mysql_fetch_array($query)) {
echo $search['id']." ".$search['marka']." ".$search['model']."<br />";
}
 

Back
Горе