Как искать строку в нескольких полях? Когда пользователь ввёл одно слово в строке поиска, - это ясно делаем так:
$str = "слово"; // слово которое хочем найти
$result = $db->sql_query("SELECT * FROM base_markers WHERE title LIKE '%{$str}%' OR address LIKE '%{$str}%' ORDER BY title LIMIT 10");
А что делать если юзерь ввёл более одного слова и необходимо выполнить поиск по разным полям?
Вот решение:
$str = 'два слова';
$points = $where = array();
$fields = array('title', 'address'); // в каких полях будем искать фразу
$str = mysql_real_escape_string($str);
$words = explode(' ', str_replace(",", "", trim($str)));
// максимальное количество баллов за точное вхождение фразы
$max_points = count($words) * 1;
foreach ($fields as $field) {
if (count($words) > 1) {
$points[] = "IF ({$field} LIKE '%{$str}%', {$max_points}, 0)";
}
foreach ($words as $w) {
if (!$w) continue;
$where[] = "{$field} LIKE '%{$w}%'";
$points[] = "IF ({$field} LIKE '%{$w}%', 1, 0)";
}
}
$where = "(" . implode(' OR ', $where) . ")";
$points = implode(' + ', $points);
$result = $db->sql_query('SELECT *, (' . $points . ') AS points FROM base_markers ORDER BY points DESC LIMIT 20');
while($row = $db->sql_fetchassoc($result)){
$output[] = $row; // это наш массив в котором будут результаты поиска
}