当前位置:数据库 > MySQL >>

关于数据库查询(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数据库里,写出详细步骤,可用的加分

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,