Я работаю на сайте, который позволяет пользователям перечислить лодки и яхты для продажи. Существует база данных mysql с таблицей «Яхты», а среди других полей - «make» и «model».MySql Search Query for Two Combined Fields
Когда люди приходят на сайт, чтобы искать лодки для продажи, есть форма поиска, один из вариантов - ввести марку и/или модель в текстовое поле. Соответствующий пункт, где на странице результатов заключается в следующем
WHERE (make LIKE '%$yacht_make%' OR model LIKE '%$yacht_make%')
Это работает, если кто-то входит либо марку или модель, но не тогда, когда они входят в оба.
Например, если кто-то входит в «Jeanneau», марка, он находит лодку с этим маркером, или если они входят в «Sun Odyssey», модель, она находит лодку этой модели, но если они войдут в " Jeanneau Sun Odyssey "это пустая.
Есть ли способ написать запрос, где все три способа ввода вышеуказанных критериев поиска найдут лодку?
Вот сайт http://yachtsoffered.com/
Спасибо,
Роб Фенвик
Edit:
Запрос построен с PHP скрипт здесь это скрипт
if(!empty($yacht_id)) {
$where = " WHERE yacht_id = $yacht_id ";
} else {
$where = " WHERE (make LIKE '%$yacht_make%' OR model LIKE '%$yacht_make%') ";
if(!empty($year_from) && !empty($year_to)){
$where .= "AND (year BETWEEN $year_from AND $year_to) ";
}
if(!empty($length_from) && !empty($length_to)){
$where .= "AND (length_ft BETWEEN $length_from AND $length_to) ";
}
if(!empty($price_from) && !empty($price_to)){
$where .= "AND (price BETWEEN $price_from AND $price_to) ";
}
if ($sail_power != 2){
$where .= "AND (sail_power = $sail_power) ";
}
if (count($material_arr) > 0){
$material = 'AND (';
foreach ($material_arr as $value) {
$material .= ' material LIKE \'%' . $value . '%\' OR';
}
$material = substr_replace ($material , ') ' , -2);
$where .= $material;
}
if (count($engine_arr) > 0){
$engine = 'AND (';
foreach ($engine_arr as $value) {
$engine .= ' engine LIKE \'%' . $value . '%\' OR';
}
$engine = substr_replace ($engine , ') ' , -2);
$where .= $engine;
}
if (count($type_arr) > 0){
$type = 'AND (';
foreach ($type_arr as $value) {
$type .= ' type LIKE \'' . $value . '\' OR';
}
$type = substr_replace ($type , ') ' , -2);
$where .= $type;
}
if (count($region_arr) > 0){
$region = 'AND (';
foreach ($region_arr as $value) {
$region .= ' region LIKE \'' . $value . '\' OR';
}
$region = substr_replace ($region , ') ' , -2);
$where .= $region;
}
$where .= 'AND (active = 1) ORDER BY yacht_id DESC';
}
$sql = "SELECT * FROM $tbl_name $where LIMIT $start, $limit";
$result = mysql_query($sql);
Вы можете разместить весь свой запрос? –
, когда оба введены в ваше поисковое поле в одном поле с маркой и моделью, поэтому он не работает, вам нужно либо явно разделить 2, использовать 2 входа, либо разделить текст на вход пользователя –
Спасибо Дагон, да, я понимаю, почему это не так я думал о том, чтобы разобрать два поля ввода, но я хотел знать, есть ли еще один вариант, проблема с их выплеском - нет способа рассказать, какие слова являются маркой, которую модель, я полагаю, я мог бы искать каждый слово, но это принесло бы слишком много результатов. –