首先,我花了整整几天的时间在互联网上搜索,试图自己找到解决方案,但没有成功。
所以现在我在这里请求你的帮助。
该网站是关于帆船中心的。
我有一个简单的搜索表单,有一个文本字段(城市)和4个复选框(俱乐部、学校、商店、旅游)。它们也是数据库的字段。
表1-航行中心
------+----------+----------+--------+--------+---------+-------
id name city club school shop tour
------+----------+----------+--------+--------+---------+--------
1 Sail1 City1 1 0 0 1
2 Sail2 City2 1 1 0 0
3 Sail3 City3 0 1 1 0
比方说,我想展示马赛所有的俱乐部和学校。
所以我在城市字段中键入马赛,并选中俱乐部和学校复选框。(我认为很明显,所有这些信息都是由帆船中心在注册期间插入的)
我想展示所有的帆船中心,既是俱乐部和学校,也只是学校或俱乐部。
这是关键。我的帆船中心既可以是俱乐部,也可以是学校。
我不知道如何构建一个select语句来解决这个问题。
重点是,我必须将select语句中的城市和复选框结合起来。这就是我不能做的。
我想指定我在数据库中为复选框创建了4个不同的字段。这样可以吗?或者,我应该只创建一个文本字段,并使用IMPMODE函数来存储和EXPLODE来检索数据吗?
希望我已经说清楚了。
我想OR应该用括号括起来。
SELECT
name
FROM
sailingcenters
WHERE
city = 'Marseille'
AND
(club = 1 OR school = 1)
SELECT
name
FROM
sailingcenters
WHERE
(club = 1 OR school = 1)
AND city = 'Marseille'
编辑:像这样构建您的查询:
$query = "SELECT * FROM sailingcenters WHERE city = 'Marseille' AND (0=1";
if ($_POST['club']=='ON') $query .= ' OR club = 1 ';
if ($_POST['school']=='ON') $query .= ' OR school = 1 ';
if ($_POST['shop']=='ON') $query .= ' OR shop = 1 ';
if ($_POST['tour']=='ON') $query .= ' OR tour = 1 ';
$query .= ')';
平凡的html->PHP->SQL语句示例
<form method=post>
<input type=checkbox name=club />
发送到回发表单处理程序,该处理程序包括:
$and_clause = "AND ";
// for each of your checkboxes do:
if(isset($_POST['club'])){
$and_clause .= "CLUB = 1 OR ";
}
//then last of all do
$and_clause .= rtrim(" OR ", $and_clause);
然后将$and_clause添加到sql语句中
$sql = "SELECT
name
FROM
sailingcenters
WHERE
city = 'Marseille' $and_clause";
$and_clause的构建可以在一定程度上实现自动化,根据白名单检查值,然后将它们大写以连接字符串,但以上内容应该会给你一个想法——如果你的问题真的是"我如何构建sql语句?"