用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4451|回复: 5
收起左侧

SQL语句怎么循环嵌套?

[复制链接]
发表于 2010-3-29 15:29:01 | 显示全部楼层 |阅读模式
昨天刚问了怎么切割关键字,现在已经成功的获取包含多个关键词的数组了,把这个数组传到视图中
准备用

//$arr1是包含关键字的数组
$a = $arr1['0'];
$b = $arr1['1'];
$sql = "SELECT * FROM topic WHERE title LIKE binary'%$a%' AND title LIKE binary'%$b%'“;

这样子的语句来进行切割,可是数组的的个数未知(也就是关键字的个数未知)
怎么用for嵌套进这个句子中呢?
发表于 2010-3-29 17:15:07 | 显示全部楼层
这个你只要对应好字段名和值就好了么
比如说有个数组$data=array("binary"=>"test","title"=>"test two");
然后你也以循环构造where条件
或者可以使用ci的db的where_like 函数
 楼主| 发表于 2010-3-29 18:15:05 | 显示全部楼层
本帖最后由 ivanlw 于 2010-3-29 18:17 编辑

回复 2# ywqbestever


    先谢谢你的回答了,不过你貌似没听懂我想说的

我是想遇到如过有1个关键字,SQL语句就是
$sql = "SELECT * FROM topic WHERE title LIKE binary'%$arr[0]%'“;
两个关键字,就
$sql = "SELECT * FROM topic WHERE title LIKE binary'%$arr[0]%' AND title LIKE binary'%$arr[1]%'“;
依此类推……

arr是一个存关键字的数组,数组个数未知
发表于 2010-3-29 19:23:33 | 显示全部楼层
本帖最后由 ywqbestever 于 2010-3-29 19:24 编辑

啊?这样不更简单?
$where = ""
for($i=0;$i<$arr.length-1;$i++){
   $where .= " title like binary.............   and ";//省略了你的条件
}
$where .=" title like binary.............   "
不就这样吗,然后你
$sql = "SELECT * FROM topic WHERE ".$where
不就可以了????
 楼主| 发表于 2010-3-29 19:38:31 | 显示全部楼层
呃,结贴吧,做了一个超级弱智的判断……
function search_topic($arr1,$space_count) {
                //标准SQL语句的记录
                //SELECT * FROM topic WHERE title LIKE binary'%回%'
                //OR title LIKE binary'% %' OR title LIKE binary'%子%'
                //循环语句描述:for ($i=0;$i<=$space_count;$i++)
                if ($space_count == 0) {
                        $a = $arr1['0'];
                        $sql = "SELECT * FROM topic WHERE title LIKE binary'%$a%'";
                } elseif ($space_count == 1) {
                        $a = $arr1['0'];       
                        $b = $arr1['1'];
                        $sql = "SELECT * FROM topic WHERE title LIKE binary'%$a%' AND title LIKE binary'%$b%'";
                } elseif ($space_count == 2) {
                        $a = $arr1['0'];       
                        $b = $arr1['1'];
                        $c = $arr1['2'];
                        $sql = "SELECT * FROM topic WHERE title LIKE binary'%$a%' AND title LIKE binary'%$b%' AND title LIKE binary'%$c%'";
                } elseif ($space_count == 3) {
                        $a = $arr1['0'];       
                        $b = $arr1['1'];
                        $c = $arr1['2'];
                        $d = $arr1['3'];
                        $sql = "SELECT * FROM topic WHERE title LIKE binary'%$a%' AND title LIKE binary'%$b%' AND title LIKE binary'%$c%' AND title LIKE binary'%$d%'";
                } elseif ($space_count == 4) {
                        $a = $arr1['0'];       
                        $b = $arr1['1'];
                        $c = $arr1['2'];
                        $d = $arr1['3'];
                        $e = $arr1['4'];
                        $sql = "SELECT * FROM topic WHERE title LIKE binary'%$a%' AND title LIKE binary'%$b%' AND title LIKE binary'%$c%' AND title LIKE binary'%$d%' AND title LIKE binary'%$e%'";
                }
                //echo $sql;
                $query = $this->db->query($sql);
                return $query->result();
        }
 楼主| 发表于 2010-3-29 19:39:00 | 显示全部楼层
回复 4# ywqbestever


    哦,对……你的方法OK!

本版积分规则