十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你可以才用and和or 两个组合起来使用,例如:
创新互联建站专业为企业提供临朐网站建设、临朐做网站、临朐网站设计、临朐网站制作等企业网站建设、网页设计与制作、临朐企业网站模板建站服务,十年临朐做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
--只是大概的结构 like 语句自己拼接
select *
from 表名
where (传入的姓名 is null or 姓名 like 传入的姓名)--没填写姓名是则该条件不生效
and (传入的地址 is null or 地址 like 传入的地址)--没填写地址是则该条件不生效
and (传入的公司 is null or 公司 like 传入的公司)--没填写公司是则该条件不生效
and (传入的学历 is null or 姓名 like 传入的学历)--没填写学历是则该条件不生效
select '1' cs,group,name from a,b where b.yuanshiid=a.id
union all
select '2',group,name from a,b where b.afterid=a.id
这边先给你提供一个动态SQL
select
*
from
table
where
1=1 //这一步是针对所有条件均未满足(where后必须跟子句)
if(name != "" and name!=null){ and name=条件一}
if(sex != "" and sex!=null){ and sex=条件二}
。。。。。。
个人解题思路
第一种:
不额外创建表(连接查询)
首先,将所有条件单独查询并将这些语句内连接
例:
select * from tb as t1
join
(select * from tb where name=条件) as t2
on
t1.id=t2.id
join
(select * from tb where age=条件) as t3
on
t1.id=t2.id
(join........ on .......)
where
t1.sex=条件
然后 将上面的查询结果看作一个表t
select t.*,count(t.id) from t
group by t.id // 以id分组
order by count(t.id) asc //以id数量为降序
limit(0,1) //取第一行值
1、执行sql语句:SELECT * FROM `article` WHERE catalog_id=13 and article_id70+2 and article_id70-2;
2、在实际使用的时候70这里是要传参数进去的,当然是参数+2和参数-2,应该是大于等于和小于等于。语法肯定没错,只是写那么个意思,你不想要70这个值只需要在程序里面把他去掉就可以了。
如果你说前后的article_id不是固定间隔的,那也有办法,你可以分别查两次,然后用union把数据组合在一起,比如:SELECT * FROM `article` WHERE catalog_id=13 and article_id70 order by article_id limit 0,2 union SELECT * FROM `article` WHERE catalog_id=13 and article_id70 order by article_id desc limit 0,2;这样查询效率会低,暂时想到的就是这个方法了
首先一个与本问题无关的问题,你获取最大值,为什么要用while循环呢,直接这样就可以:
$sql
=
"SELECT
max(id)
as
MAX
FROM
a"
$data
=
mysql_query($sql,
$conn);
list($var_max_num)
=
mysql_fetch_row($data);
mysql_free_result($data);//注意及时FREE
另外,及时你不想用自动增加,也应该给这个字段设置为主键或者唯一索引,不要让它重复。
如果你的程序没有问题,那么可能是存在并行,一个进程查出最大为6之后,不断的从7、8、9开始插入数据,另外一个进程可能查出最大为7之后,从8、9、10之后开始插入数据。
还有,对于实际使用了程序系统,每次都去max并不可取,应该另外设置一个静态参数表,只有一条记录、一个字段,用来存放下一次插入的数据,每次需要插入数据的时候就来查这个表,速度应该比MAX快。