首先,我整天都在网上搜索并试图找到自己的解决方案,但没有成功。
所以现在我来这里寻求你的帮助。
该网站是关于帆船中心。
我有一个简单的搜索表单,包含文本字段(城市)和4个复选框(俱乐部,学校,商店,旅游)。这些都是数据库的字段。
表1 - carscenters
------+----------+----------+--------+--------+---------+-------
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
假设我想展示马赛的所有俱乐部和学校。
所以我在城市场地中键入马赛并检查CLUB和SCHOOL复选框。 (我认为很明显所有这些信息都是在登记期间由帆船中心插入的)
我想展示所有CLUB和学校的帆船中心,还要展示学校或俱乐部。
这是关键点。我的帆船中心既可以是俱乐部也可以是学校。
我无法弄清楚如何构建一个select语句来解决这个问题。
关键是我必须在select语句中组合城市和复选框。这就是我无法做到的。
我想指出,对于复选框,我在数据库中创建了4个不同的字段。这个可以吗?或者我应该只创建一个文本字段并使用IMPLODE函数存储和EXPLODE来检索数据?
希望我已经清楚了。
答案 0 :(得分: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 .= ')';
答案 1 :(得分:1)
我想,OR应该用括号括起来。
SELECT
name
FROM
sailingcenters
WHERE
city = 'Marseille'
AND
(club = 1 OR school = 1)
答案 2 :(得分:0)
琐碎的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的构建可以在某种程度上自动化,根据白名单检查值然后UPPERCASE它们连接字符串,但上面应该给你的想法 - 如果你的问题真的是“我如何构建sql语句?“