问一个搜索的问题?

xiaoao 2004-12-08 02:52:10
有一个表。现在要求可以搜索出相关数据。表单提交里有几个条件,时间(近3天,或者当天),关键字(按照表的题目),积分(看积分多少,比如小于10,小于20)。
问题是,现在要求可以组合查询,就是上面的3个条件可以全部出现,也可以只出现一个。PHP里的SELECT语句应该如何写?
...全文
89 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zc1966 2004-12-09
我同意jxflll的方法
回复
Einar 2004-12-09
刚有点错误把这里改一下
if($search_time<>"")
{
switch ($search_time)
{
case 1:
$search1="and 时间字段 BETWEEN CURDATE() and DATE_ADD(CURDATE(),INTERVAL 1 DAY)";
$search1_value = "&search_time=$search_time";
break;
case 2:
$search1="and 时间字段 BETWEEN CURDATE() and DATE_ADD(CURDATE(),INTERVAL 3 DAY)";
$search1_value = "&search_time=$search_time";
break;
default:
$search1="";
$search1_value = "";
break;
}
}
else
{
$search1 = "";
$search1_value = "";
}
回复
Einar 2004-12-09
if($search_time<>"")
{
switch ($search_time)
{
case 1:
$search2="and 时间字段 BETWEEN CURDATE() and DATE_ADD(CURDATE(),INTERVAL 1 DAY)";
$search2_value = "&search_time=$search_time";
break;
case 2:
$search2="and 时间字段 BETWEEN CURDATE() and DATE_ADD(CURDATE(),INTERVAL 3 DAY)";
$search2_value = "&search_time=$search_time";
break;
default:
$search2="";
$search2_value = "";
break;
}
}
else
{
$search2 = "";
$search2_value = "";
}

if($search_key<>"")
{
$search2 = "and (字段名称)like '%$search_key%'";
$search2_value = "";
}
else
{
$search2 = "";
$search2_value = "";
}
if($search_number<>"")
{
$search3 = "and (积分字段)<$search_number";
$search3_value = "&search_number=$search_number";
}
else
{
$search3 = "";
$search3_value = "";
}
$sql = "select * from table where id<>'' $search1 $search2 $search3 ";
$search1_value等类似命名的则放在分页里面"search_more.php?page=$page$search1_value$search2_value$search3_value";
写得这么详细你不清楚的话,那真的是没有办法了
回复
skystar008 2004-12-09
与与或的组合吧.
回复
uGain 2004-12-08
要注意,sql语句不是php的
回复
jxflll 2004-12-08
$sql="select * from tablename where 1=1";
if(时间条件不为空){
$sql.=" and 时间=你输入的时间条件";
}
if(关键字条件不为空){
$sql.=" and 关键字=你输入的关键字";
}
if(积分条件不为空){
$sql.=" and 积分=你输入的积分";
}
这样这个sql语句就构建成了。
回复
magicsnake 2004-12-08
在表单中可以用一些checkbox跟这些条件元素做成一一对应的关系,当提交表单的时候,在PHP中根据checkbox的提交情况判断用户选中的是那些条件,然后构造sql语句,比如用户钩中第一(时间)和第三(积分)个条件,那么可以就可以构造:
select * from tablename where 时间 = 当天 and 积分 = 数值;的语句.

要想更灵活些,可以在表单中把逻辑运算符也做成select选择框让用户选择就可以构造出各种sql语句
回复
ygjwjj 2004-12-08
select * from tablename where datediff(d,now,时间)<=3 or keyword='关键字' or score<20...
回复
erldy 2004-12-08
select * from tablename where ... or ... or ...
回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2004-12-08 02:52
社区公告
暂无公告