首页 后端开发 php教程 有and 有OR的依据几个字段生成SQL语句

有and 有OR的依据几个字段生成SQL语句

Jun 13, 2016 pm 01:16 PM
comparator quot

有and 有OR的根据几个字段生成SQL语句
有如下图的数据表信息,有什么好的方法把它们组合成一条SQL?如果全是and 的或者全是or的,这方法好办,可是两个同时都有的,怎么办呢?



全是AND 或OR的话

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
        $sql = "select * from sk_cvfilter where cvid=58 and columnname!=''";
        $query = mysql_query($sql);
        $sql = '';
        while($row = mysql_fetch_assoc($query)){
            if($row['comparator']=='eq'){$comparator="=";}
            else{$comparator=$row['comparator'];}
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
        }

登录后复制


------解决方案--------------------
SQL code
select * from sk_cvfilter where cvid=58 and columnname!='' and andor='and' or andor='or'
<br><font color="#e78608">------解决方案--------------------</font><br>你的这个记录有问题,为什么呢?<br><br>例如出现一个 (a = 1 or (b=2 and b=3)),这个时候,你是怎么记录的?<br><br>我猜是这样的<br><br>columnname   comparator   value   andor<br>a            eq           1       or<br>b            eq           2       and<br>c            eq           3      <br><br>这个时候问题出现了,假如你不知道上面的那个关系式(a = 1 or (b=2 and b=3)),<br>如果只从结构看的话,你是认为<br><br>(a = 1 or b =2 ) and b = 3<br><br>还是<br><br>  a = 1 or (b=2 and b=3)<br><br>上述问题不考虑,所有or为一个条件和其他条件and的写法<br><br><br>
登录后复制
PHP code

<?php $sql = "select * from sk_cvfilter where cvid=58 and columnname!=''";
$query = mysql_query($sql);
$sql = '';

// 记录上一句的是不是or
$is_last_or = false;


while($row = mysql_fetch_assoc($query)){
    if($row['comparator']=='eq'){$comparator="=";}
    else{$comparator=$row['comparator'];}
    
    
    if($is_last_or) {
        if($row['andor'] == 'and') {
            // 和下一句是and关系说明括号要结束了
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ) ".$row['andor'].' ';
        } else {
            // 持续括号里的内容
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
        }
    } elseif($row['andor'] == 'or') {
        // 如果有or则意味着和下一句有或的关系(因为你这里没有括号)
        $is_last_or = true;
        // 加上括号吧
        $sql .= '( ' . $row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
    } else {
        $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
    }
    
}
<br /><font color="#e78608">------解决方案--------------------</font><br>
登录后复制
PHP code

<?php $sql = "select * from sk_cvfilter where cvid=58 and columnname!=''";
$query = mysql_query($sql);
$sql = '';

// 记录上一句的是不是or
$is_last_or = false;


while($row = mysql_fetch_assoc($query)){
    if($row['comparator']=='eq'){$comparator="=";}
    else{$comparator=$row['comparator'];}
    
    
    if($is_last_or) {
        if($row['andor']  != 'or') {
            // 和下一句是and或者结束了关系说明括号要结束了
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ) ".$row['andor'].' ';
        } else {
            // 持续括号里的内容
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
        }
    } elseif($row['andor'] == 'or') {
        // 如果有or则意味着和下一句有或的关系(因为你这里没有括号)
        $is_last_or = true;
        // 加上括号吧
        $sql .= '( ' . $row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
    } else {
        $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
    }
    
} <div class="clear">
                 
              
              
        
            
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java去重排序之Comparable与Comparator怎么使用 Java去重排序之Comparable与Comparator怎么使用 May 11, 2023 pm 03:43 PM

一、排序与去重日常工作中,总会有一些场景需要对结果集进行一些过滤。比如,与第三方交互后获取的结果集,需要再次排序去重,此时就会根据某个字段来去重,又或者某个字段来排序。在Java中,去重的话,我们很容易就想到了Set的特性(无序无重),并且TreeSet(有序无重)还可以指定去重的规则(去重后一般是升序的结果集)。排序的话,我们很容易想到各种排序算法,但Java中已经提供了排序的功能,如集合中sort()方法,并且还可以指定排序的字段和升降序。在此多说一句,Set的特性(无序无重):无序:无序性

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Java中Comparable和Comparator怎么使用 Java中Comparable和Comparator怎么使用 May 03, 2023 am 10:07 AM

Comparable和ComparatorComparable和Comparator是Java的两个和排序相关的接口,又被称为自然排序和定制排序。最近看了相关的内容,现在来记录以下自己的学习情况。Comparable和Comparator是关于排序的两个接口,用来实现Java集合中的的排序功能。具体作用可以查看API获取。Comparable这是API文档中的简要介绍:Thisinterfaceimposesatotalorderingontheobjectsofeachclassthatimp

java中Comparator如何用 java中Comparator如何用 May 10, 2023 pm 06:31 PM

1、说明Java提供比较的接口Comparable,用于比较,实现该接口的所有类,都动态地实现了该比较方法。事实上,Java不仅提供了一个比较接口,还提供了另一个接口。Comparator接口也具有比较功能,但该接口重视的是比较容器。2、实例Comparator在Java8之前被广泛使用。Java8不仅升级为函数接口,还扩展了默认方法。Comparatorcomparator=(p1,p2)->p1.firstName.compareTo(p2.firstName);Personp1=ne

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 Jun 13, 2016 am 10:15 AM

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没问题。

图片消失怎么解决 图片消失怎么解决 Apr 07, 2024 pm 03:02 PM

图片消失如何解决先是图片文件上传$file=$_FILES['userfile'];  if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 Jun 13, 2016 am 10:24 AM

为什么我在php上写的这个代码,在浏览器上什么都不显示啊

图片消失怎么解决 图片消失怎么解决 Jun 13, 2016 am 10:09 AM

图片消失如何解决先是图片文件上传$file=$_FILES['userfile'];  if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

See all articles