對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)的時候,將其回收掉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM