Mysql动态数据多条件查询
前言
有的时候,我们进行数据的数据查询的时候,我们会加入筛选条件。
例如:
select * from user where username = ?
// ? 指的是自己输入的过滤条件
但是有的时候,我们又不想查询这个username的关键词。
select * from user
# 只想上面语句效果
怎么办呢?
原理解析
# 首先我们知道下面两条语句的效果是一样的。
select * from user
select * from user where username = username
# username = username, 肯定为true
# select * from user 和 select * from user where username = username 等价
那么我们添加一个IF语句,就可以实现我们的需求了。
select * from user where username = IF(?='',username,?)
# ? 将会被替换成您输入的查询关键词
实践
这里使用PHP来进行演示。
function select_user_better($username, $email)
{
global $mysqli;
// 动态多条件符合查询
$result = $mysqli->query("SELECT * FROM user WHERE
username=IF('$username'='',username,'$username')
AND email=IF('$email'='',email,'$email')
;") or die($mysqli->errno);
while ($row = $result->fetch_assoc()) {
pre_r($row);
}
}
调用函数
select_user_better(’’,’’);
由于我们输入 u s e r n a m e 和 username和 username和email 为 空。
所以sql语句运行后,等价于下面的形式
SELECT * FROM user WHERE username=usename AND email=email
自然查询出了全部的数据。
运行效果如下:
当然我们可以根据用户名查询。
调用函数:
select_user_better(‘admin’,’’);
运行效果:
运用实例
/**
* 用户查询
* @tips: 支持通过$id, $title, $category, $meta来动态多条件查询
* @param $id
* @param $title
* @param $category
* @param $meta
*/
function article_select($id, $title, $category, $meta)
{
global $mysqli;
$result = $mysqli->query("
SELECT
id,
create_time,
edit_time,
title,
content,
author,
category,
meta,
main_pic
FROM
article
WHERE
id=IF('$id'='',id,'$id') AND
title like IF('$title'='',title,'%$title%') AND
category=IF('$category'='',category,'$category') AND
meta like IF('$meta'='',meta,'%$meta%')
") or die($mysqli->error);
$arr = array();
while ($row = $result->fetch_assoc()) {
array_push($arr, $row);
}
return $arr;
}
转载:https://blog.csdn.net/xia_yanbing/article/details/116706429
查看评论