在我的网页(html、php)上,我试图让用户可以选择多个复选框,每个复选框有效地过滤用户看到的结果。根据不同列中的值从数据库 (MySQL) 中提取信息。如下所示,一列是Joint_1,另一列是Position。
适用于过滤的有效代码(非常静态,显然不实用)是这样的:
$sql = "SELECT * FROM `Table_Name` WHERE (Joint_1=\'region1\' OR
Joint_1=\'region2\' OR
Joint_1=\'region3\' OR
Joint_1=\'region4\') AND
(Position=\'position1\' OR
Position=\'position2\' OR
Position=\'position3\')";
$result = $conn->query($sql);
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["Common_Name1"] . "<br>";
}
} else {
echo "0 results";
}
下面的代码是对上面代码的尝试,但是使用了数组,这不起作用。
$regions =
array('region1', 'region2', 'region3', 'region4');
$position = array('position1', 'position2', 'position3');
$sql = "SELECT * FROM `Table_Name` WHERE (Joint_1=\'. $regions[0] .\' OR
Joint_1=\'. $regions[1] .\' OR
Joint_1=\'. $regions[2] .\' OR
Joint_1=\'. $regions[3] .\') AND
(Position=\'. $position[0] .\' OR
Position=\'. $position[0] .\' OR
Position=\'. $position[0] .\')";
以上代码提供“0 个结果”的结果。
我已经尝试多次执行此操作,下面还包含其他非功能代码(下面尝试仅基于 1 列进行过滤,因为我显然没有掌握基于 2 列进行过滤的代码)。
$sqlregion = array();
foreach ($_POST['region'] as $reg) {
$sqlreg[] = "'" . mysql_real_escape_string($reg) . "'";
}
$sql = "SELECT * FROM 'Exercises' WHERE Joint_1 IN (" . implode(",",
$sqlreg) . ");";
$result=$conn->query($sql);
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["Common_Name1"] . "<br>";
}
}
感谢任何帮助!谢谢。
最佳答案
您可以从数组构造此查询,您可以使用mysql中的IN
子句指定多个OR
值
$regions = array('region1', 'region2', 'region3', 'region4');
$position = array('position1', 'position2', 'position3');
$regions = implode(",", $regions); // Converts array to string with comma as a separator
$position = implode(",", $position);
$sql = "SELECT * FROM `Table_Name` WHERE Joint_1 IN ($regions) AND Position IN ($position)";
echo $sql;
这会给你一个像这样的查询
SELECT * FROM Table_Name WHERE Joint_1 IN (region1,region2,region3,region4) AND Position IN (position1,position2,position3)
添加您自己的 LIMIT
GROUP BY
或 ORDER BY
参数以满足您的需求
关于从数组和变量过滤时PHP mysql查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702164/