php - 来自 sql 的 PHP 3 多选查询
问题描述
所以,我使用了我的谷歌朋友,但我在任何地方都找不到解决方案。情况如下,给定 3 个多项选择,您可以从中分别选择多个选项并仅列出其中的选项。我的意思是在 SQL 查询中:
从名字像“%2%”、年龄像“%1%”、工作像“%2%”的人中选择*
这是代码:
<form action="" method="post">
<select class="selectpicker" id="name" name="name[]" multiple data-live-search="true">
<option value="1">1</option>
<option value="2">2</option>
</select>
<select class="selectpicker" id="age" name="age[]" multiple data-live-search="true">
<option value="1">1</option>
<option value="2">2</option>
</select>
<select class="selectpicker" id="work" name="work[]" multiple data-live-search="true">
<option value="1">1</option>
<option value="2">2</option>
</select>
</form>
解决方案
如果select
菜单中的值如上所述 - 即:整数,那么假设我正确解释了问题/请求,我认为您可以尝试以下操作。
<?php
if( $_SERVER['REQUEST_METHOD']=='POST' ){
/*
filter the POST values - ensur ethey are integers
*/
$_POST['name']=filter_input( INPUT_POST, 'name', FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY );
$_POST['age']=filter_input( INPUT_POST, 'age', FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY );
$_POST['work']=filter_input( INPUT_POST, 'work', FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY );
# base sql query
$sql='select * from `people`';
# arrays to store `like` clauses for each selected option
$a=$b=$c=array();
/*
process all selected options and add to respective array
*/
if( !empty( $_POST['name'] ) ){
foreach( $_POST['name'] as $value ){
if( !empty( $value ) ) $a[]='`name` like "%'.$value.'%"';
}
}
if( !empty( $_POST['age'] ) ){
foreach( $_POST['age'] as $value ){
if( !empty( $value ) ) $b[]='`age` like "%'.$value.'%"';
}
}
if( !empty( $_POST['work'] ) ){
foreach( $_POST['work'] as $value ){
if( !empty( $value ) ) $c[]='`work` like "%'.$value.'%"';
}
}
/*
construct final sql
*/
if( !empty( $a ) or !empty( $b ) or !empty( $c ) ) $sql.=' where ';
if( !empty( $a ) )$sql.= sprintf('( %s )', implode( ' OR ', $a ) );
if( !empty( $b ) )$sql.= ' AND ' . sprintf('( %s )', implode( ' OR ', $b ) );
if( !empty( $c ) )$sql.= ' AND '. sprintf('( %s )', implode( ' OR ', $c ) );
#what you do with it now is up to you...
exit( $sql );
}
?>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title></title>
<style>
select{width:100px}
</style>
</head>
<body>
<form method='post'>
<select class='selectpicker' name='name[]' multiple data-live-search='true'>
<option value=1>1
<option value=2>2
</select>
<select class='selectpicker' name='age[]' multiple data-live-search='true'>
<option value=1>1
<option value=2>2
</select>
<select class='selectpicker' name='work[]' multiple data-live-search='true'>
<option value=1>1
<option value=2>2
</select>
<input type='submit' />
</form>
</body>
</html>
推荐阅读
- c# - datagridview 中 3 列的聚合数
- python - 计算不同列表中的相同元素
- powerbi - 将本地存储的图像添加到 Power BI 强制有向图节点
- r - 不同组的线图
- indexing - 为什么此复合辅助沙发库索引仅与创建查询中的第一个字段匹配
- python - 为什么 odoo 中有许多记录,sql 查询的工作速度更快?
- botframework - 将机器人部署到 Azure 时 Microsoft.Bot.Builder.Autofac DLL 不匹配
- python - 出现错误:(25,'Inappropriate ioctl for device')关于在 while 循环中使用 python-inquirer 在命令行上创建复选框
- python - 如何将 numpy 数组中的 id 值更改为带有字典的字符串 numpy 数组
- csv - 可选地从 CSV 中“获取”记录