关于数据库查询(mysql数据库 PHP脚本)
数据库表A结构和数据为
ID Fa
1 1,2,3
2 4,5
3 1,5
4 10,18
5 12,15,18
6 1,13
6 7,13,19,22
如何从数据库中列出 字段Fa中包含1-9数字的数据(也就是只列出ID为 1、2、3、6、7的数据)
补充:除了 for($i=1;$i<=9;$i++){
sqladd.="Fa like '%$i%,'"
}
这样的办法 还有其它的吗?如果限定条件不是1-9 是1-100的话 sql语句会超大 会不会很影响效率
追问:这种办法 可行 先查一遍 然后循环判断 取出符合条件的ID 最后 ID in 一下就可以
这种办法 和
for($i=1;$i<=9;$i++){
sqladd.="Fa like '%$i%,'"
}
两种 效率方面哪种效率高?
======================
目前现状是
表A的记录可能会很大 几十万条数据 而条件1-9 最大只能是1-100因为信息列表页面包含分页 需要在查询的时候就过滤掉不符合条件的数据 不然分页程序要改成JS的 很麻烦。有没有其他的好办法呢?貌似不行的样子 between 1 and 9 等同于 1<fa<9信息列表页面包含分页 需要在查询的时候就过滤掉不符合条件的数据 不然分页程序要改成JS的 很麻烦 我现在分页是 按 mysql limit来分的嗯 这个方法跟 zzh02333 的一样 是可行的
考虑到效率问题
===================
这个问题的原型是 新闻系统的 权限判断
1、某站 新闻系统 分类约 50个左右
2、某条新闻 可能同时拥有多个分类(Fa字段就是新闻分类字段 多个分类用,号分割)
3、新闻审核人员拥有部分或者全部分类的审核权限(1-9这个就是 审核人员拥有审核权限的分类用,号分割)
现在该审核人员登录后要列出他所拥有审核权限的新闻列表mysql 可以直接存储数组吗?如果存成数组该怎么操作呢?谢谢~我最后还是采用了 zzh02333 的方法 因为 like条件每个ID 有四个 分别是 like '%B.ID,' like 'B.ID,%' like '%,B.ID,%' 和 等于B.ID
答案:查询表时将FA字段内容根据 , 拆分成数组,然后进行判断,若在范围内记录FA的ID号到另一数组,遍历后将另一数组中对应ID得数据从FA取出。
其他:SELECT Fa FROM `A` WHERE Fa between 1 and 9; 1.用php从数据库读出来每条数据
2.用explode(‘,’,‘这里是每条Fa数据’)拆分成数组
3.比对拆分的数组里是否有1-9的数字,有的话输出一下 追问因为信息列表页面包含分页 需要在查询的时候就过滤掉不符合条件的数据 不然分页程序要改成JS的 很麻烦。有没有其他的好办法呢? 比较赞同 oogchoo 的想法,先查出所有数据,然后将Fa分割成数组形式,最后判断这个数组中与1-9的数组是否有符合的数据。 可以考虑借助另外一张表B,存储1--9,如下:
ID
1
2
.
.
9
然后一句sql如下:
select A.ID, A.FA FROM A INNER JOIN B ON concat(',', A.FA, ',') like concat('%,', B.ID, ',%');
试一下,应该可以。
上一个:java写程序。用的MySQL数据库。想问一下
下一个:linux下怎么把.sql文件导入到MySQL数据库里,写出详细步骤,可用的加分