Как искать строку в нескольких полях? Когда пользователь ввёл одно слово в строке поиска, — это ясно делаем так:
$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; // это наш массив в котором будут результаты поиска }