我正在使用一些可选搜索条件为场地网站构建搜索功能。我从一个基本查询开始,然后根据提交的参数对其进行修改。
这是我的数据库结构示例:
场地
id | title
----------
1 | First venue
2 | Second venue
类型
id | type
---------
1 | Barn
2 | Hotel
3 | Castle
地点类型
venue_id | type_id
------------------
1 | 1
1 | 2
1 | 3
开始的MySQL查询是:
SELECT * FROM venues
WHERE visible = 1
$query
ORDER BY title ASC
下面是一个示例,说明如何为一个简单的选项修改$ query变量:
if(isset($_POST['region']))
{
$query .= " AND region_id = " . $mysqli->real_escape_string($_POST['region']);
}
现在,我遇到的问题是提交“ type”选项时如何处理,该选项包含多个值:
<select multiple name="type[]">
我开始尝试创建另一个修饰符查询,但确实很难知道如何处理这一部分,如何采用POST数组并连接相关表。
任何帮助,不胜感激!
答案 0 :(得分:0)
只是一个想法,如何实现
<?php
$sql = [
"SELECT * FROM `venues` AS `v`",
"INNER JOIN `venues_types` AS `vt` ON vt.venues_id=v.type_id",
"INNER JOIN `types` AS `t` ON vt.type_id=t.id",
];
$where = ["v.visible=1"];
if (isset($_POST['region'])) {
$where[] = "region_id = " . $mysqli->real_escape_string($_POST['region']);
}
if (!empty($_POST['type']) && is_array($_POST['type'])) {
$where[] = "type_id IN (" .
implode(
",",
array_map(
function ($itm) {
return (int)$itm;
},
$_POST['type']
)
) . ")";
}
$sql[] = "WHERE " . implode(" AND ", $where);
$sql[] = "ORDER BY v.title ASC";
$sqlAsTxt = implode(" ", $sql);
echo $sqlAsTxt;
?>