zoukankan      html  css  js  c++  java
  • 对MySQL查询结果进行替换

    IF函数

    IF(expr,v1,v2):如果表达式expr成立,那么返回v1,否则返回v2

    例如:在table1type字段存在值为-1的记录,现在对table1进行查询,如果该字段值为-1,就变为0,其他值不改变。

    SELECT IF(type=-1, 0, type) as type
    FROM table1;

    CASE语句

    CASE case_value
    WHEN when_value THEN
    statement_list
    ELSE
    statement_list
    END alias;
    对case_value进行判断,根据case_value满足的条件返回结果,并重命名为alias。

    SELECT
        CASE type
        WHEN 1 THEN
            '苹果'
        WHEN 2 THEN
            '香蕉'
        ELSE
            ''
        END type
    FROM table1;

    在TP链式查询中使用上述逻辑

      1. IF函数

        例如:在table1type字段存在值为-1的记录,现在对table1进行查询,如果该字段值为-1,就变为0,其他值不改变,并将结果存到table2

        //连接到数据库,假设连接为local
        //...
        //读取数据
        $reslut = $local
                    ->name('table1')    //使用table1
                    ->field('IF(type=-1, 0, type) as type')
                    ->select();
                    
        //向table2中插入数据
        //true参数:如果找到了相同的主键记录,就进行更新
        $local->name('table2')->insertAll($result, true);
      2. 当需要进行大量判断的时候,更推荐在代码中进行判断。在数据库进行判断,将会增大数据库服务器的压力。所以,上述例2,可以使用下面的方式。
        //连接到数据库,假设连接为local
        //...
        //读取数据
        $result = $local
                    ->name('table1')
                    ->field('type')
                    ->select();
        
        //处理数据
        foreach ($result as &$type) {
            switch ($type['type']) {
                case 1:
                    $type['type'] = '苹果';
                    break;
                case 2:
                    $type['type'] = '香蕉';
                    break;
                case 3:
                    $type['type'] = '';
                    break;
                default:
                    break;
            }
            unset($type);
        }
        
        //向table2中插入数据
        $local->name('table2')->insertAll($reslut, true);

        在上面的例子中,处理数据的时候,使用了引用传递&$type,如果不使用引用传递,$result是不会改变的。同时,还要注意的是,这里对每个遍历出来的$type进行了unset操作。这是很重要的一点,引用传递之后,要记得进行unset,将该变量与内存地址的绑定切断,这样才能在垃圾回收(GC)的时候,将其回收掉。

  • 相关阅读:
    值得推荐的C/C++框架和库
    P2P技术基础: 关于TCP打洞技术
    Java FileInputStream与FileReader的区别
    如何理解java采用Unicode编码
    细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4
    程序员趣味读物:谈谈Unicode编码
    字符编码笔记:ASCII,Unicode 和 UTF-8
    Java并发编程:volatile关键字解析(转)
    java线程安全问题之静态变量、实例变量、局部变量
    Hystrix使用详解
  • 原文地址:https://www.cnblogs.com/mike-mei/p/14609569.html
Copyright © 2011-2022 走看看