我正在开发一个允许用户列出待售船只和游艇的网站。有一个 mysql 数据库,它有一个表“yachts”,其中包括“make”和“model”。
当人们来到该网站寻找待售船只时,会有一个搜索表单,其中一个选项是在文本字段中输入品牌和/或型号。结果页面上相关的where子句如下
WHERE ( make LIKE '%$yacht_make%' OR model LIKE '%$yacht_make%')
如果有人输入品牌 或型号,但如果他们同时输入,则此方法有效。
例如,如果有人输入品牌“Jeanneau”,它会找到具有该品牌的船,或者如果他们输入模型“Sun Odyssey”,它会找到该模型的船,但如果他们输入“Jeanneau Sun Odyssey”它是空的。
有没有办法编写一个查询,输入上述搜索条件的所有三种方式都可以找到船?
谢谢,
罗布·芬威克
编辑:
查询是用 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);