2013-10-25 4 views
0

У меня есть этот сайт местных объявлений с базой данных mysql и я использую PHP. имеет таблицу, где хранятся списки, но мы будем использовать только 3 колонки для поиска:поиск базы данных mysql с использованием фраз

колонок названия, описание, цена

, что это лучший способ поиска в базе данных, когда пользователь в фразе, например «довольно используемые мобильные устройства 20 000»

Я хочу, чтобы иметь возможность искать 3 столбца, если фразы соответствуют любому в базе данных эффективно. Я знаю о функции «% LIKE», но я думаю, что должен быть лучший способ.

+0

Что случилось с '% LIKE%', а также в каком направлении лучшего способа, может быть, если вы объясните, почему вы не в порядке с% LIKE% и что вы хотите получить больше, мы могли бы помочь –

+0

, и я надеюсь, что результат поиска должен проверять каждое слово или фразу в столбцах и возвращать соответствующие результаты. но% вроде этого не делает – Udo

+0

Я не знаю, есть ли функция в mysql, которая может ее разбить, но вы можете сделать это на PHP, я попытаюсь отформатировать ответ –

ответ

1

не используют, как,

определяют полнотекстовый индекс на ваших 3 колонки

и поиск как полнотекстовый

0

Вы можете попробовать что-то вроде этого

$search = 'fairly used mobile devices 20,000'; 

SELECT * 
FROM YOUR_TABLE 
WHERE column_title like '%$search%' 
OR description like '%$search%' 
OR price like '%$search%' 
ORDER BY CASE WHEN `column_title` LIKE '%$search%' THEN 0 
       WHEN `description` LIKE '%$search%' THEN 1 
       WHEN `price` LIKE '%$search%' THEN 2 
       ELSE 3 
     END 

Если вы хотите искать каждое слово, Вы должны разбить строку с пространством и добавить их также в запросе

1

Вы должны explode() строку для поиска каждого слова. С другой стороны, вы должны установить правильный тип столбца для price, потому что 20,000 не является допустимым числовым типом, вам нужно либо хранить 20 000 в дБ, либо отливать в php от 20 000 до 20 000, либо взорвать строки на , также не только свободное место.

Простой взрываемся может быть сделано с расщепления строки на ' ' - свободное пространство, и он будет работать для изменения, но это не будет работать, если тип пользователя fairly, used, потому что `LIKE«% достаточно,%»не вернется желаемый выход.

Я покажу простой код для взрыва пустой строкой, просто для объяснения логики, но я надеюсь, что вы можете сделать поисковую систему немного умнее, заменив впоследствии нежелательные символы.

<form action="" method="post"> 
    <input type="text" name="phrase" /> 
    <input type="submit" /> 
</form> 

<?php 
$phrases = isset($_POST['phrase']) ? $_POST['phrase'] : null; 
$phrases = explode(' ', $phrases); 
foreach ($phrases as $phrase) { 
    $queries[] = $db->query("SELECT title, description, price 
          FROM test 
          WHERE title LIKE '%$phrase%' 
          OR description LIKE '%$phrase%' 
          OR price LIKE '%$phrase%'; 
    "); 
} 
// managing the output should be done depending on the db library you are using 
+0

спасибо, но я только что открыл полный текст, я думаю, что это будет работа для меня, спасибо за усилия – Udo

1

вы можете попробовать, как:

$search = 'fairly used mobile devices 20,000'; 

list_title like '%".implode('%', explode(' ', $search))."%' 
Смежные вопросы