• 对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)的时候,将其回收掉。

  • 相关阅读:
    关于tp5框架的安装与配置
    关于php的前台,后台的基本写法
    提取大段文字中的特殊段落
    UGUI 打图集
    事件管理
    tornado install
    Install aws cli
    code migrate
    Codecommit
    Curl elasticsearch
  • 原文地址:https://www.cnblogs.com/mike-mei/p/14609569.html
Copyright © 2020-2023  润新知