Changeset 15570


Ignore:
Timestamp:
2007/09/03 20:20:29 (13 years ago)
Author:
nanasess
Message:

tab -> space

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/data/class/SC_SelectSql.php

    r15532 r15570  
    88/* ---- SQL文を作るクラス ---- */ 
    99class SC_SelectSql { 
    10      
    11     var $sql; 
    12      
    13     var $select;     
    14     var $where; 
    15     var $order; 
    16     var $group; 
    17     var $limit; 
    18     var $offset; 
    19     var $arrSql; 
    20     var $arrVal; 
    21  
    22     //-- コンストラクタ。 
    23     function SC_SelectSql($array = "") { 
    24         if (is_array($array)) { 
    25             $this->arrSql = $array; 
    26         } 
    27     } 
    28  
    29     //-- SQL分生成 
    30     function getSql( $mode = "" ){ 
    31         $this->sql = $this->select ." ". $this->where ." ". $this->group ." "; 
    32                          
    33         // $mode == 1 は limit & offset無し                         
    34         if ($mode == 2) { 
    35             $this->sql .= $this->order; 
    36         }elseif ( $mode != 1 ){ 
    37             $this->sql .= $this->order . " " .$this->limit ." ". $this->offset;  
    38         } 
    39  
    40         return $this->sql;   
    41     } 
    42  
    43         // 検索用 
    44     function addSearchStr($val) { 
    45         $return = sfManualEscape($val); 
    46         $return = "%" .$return. "%"; 
    47         return $return; 
    48     } 
    49      
    50     //-- 範囲検索(○ ~ ○ まで) 
    51     function selectRange($from, $to, $column) { 
    52  
    53         // ある単位のみ検索($from = $to) 
    54         if(  $from == $to ) { 
    55             $this->setWhere( $column ." = ?" ); 
    56             $return = array($from); 
    57         // ~$toまで検索 
    58         } elseif(  strlen($from) == 0 && strlen($to) > 0 ) { 
    59             $this->setWhere( $column ." <= ? ");  
    60             $return = array($to); 
    61         // ~$from以上を検索 
    62         } elseif(  strlen($from) > 0 && strlen($to) == 0 ) { 
    63             $this->setWhere( $column ." >= ? "); 
    64             $return = array($from); 
    65         // $from~$toの検索 
    66         } else { 
    67             $this->setWhere( $column ." BETWEEN ? AND ?" );  
    68             $return = array($from, $to); 
    69         } 
    70         return $return; 
    71     } 
    72  
    73     //-- 期間検索(○年○月○日か~○年○月○日まで) 
    74     function selectTermRange($from_year, $from_month, $from_day, $to_year, $to_month, $to_day, $column) { 
    75  
    76         // FROM 
    77         $date1 = $from_year . "/" . $from_month . "/" . $from_day; 
    78          
    79         // TO 
    80         $date2 = mktime (0, 0, 0, $to_month, $to_day,  $to_year); 
    81         $date2 = $date2 + 86400; 
    82         // SQL文のdate関数に与えるフォーマットは、yyyy/mm/ddで指定する。 
    83         $date2 = date('Y/m/d', $date2); 
    84          
    85         // 開始期間だけ指定の場合 
    86         if( ( $from_year != "" ) && ( $from_month != "" ) && ( $from_day != "" ) && ( $to_year == "" ) && ( $to_month == "" ) && ( $to_day == "" ) ) { 
    87             $this->setWhere( $column ." >= '" . $date1 . "'"); 
    88         } 
    89  
    90         // 開始〜終了 
    91         if( ( $from_year != "" ) && ( $from_month != "" ) && ( $from_day != "" ) &&  
    92             ( $to_year != "" ) && ( $to_month != "" ) && ( $to_day != "" ) ) { 
    93             $this->setWhere( $column ." >= '" . $date1 ."' AND ". $column . " < date('" . $date2 . "')" ); 
    94         } 
    95  
    96         // 終了期間だけ指定の場合 
    97         if( ( $from_year == "" ) && ( $from_month == "" ) && ( $from_day == "" ) && ( $to_year != "" ) && ( $to_month != "" ) && ( $to_day != "" ) ) { 
    98             $this->setWhere( $column ." < date('" . $date2 . "')"); 
    99         } 
    100         return $return; 
    101     }    
    102  
    103     // checkboxなどで同一カラム内で単一、もしくは複数選択肢が有る場合 例: AND ( sex = xxx OR sex = xxx OR sex = xxx  ) AND ...  
    104     function setItemTerm( $arr, $ItemStr ) { 
    105  
    106         foreach( $arr as $data ) { 
    107      
    108             if( count( $arr ) > 1 ) { 
    109                 if( ! is_null( $data ) ) $item .= $ItemStr . " = ? OR ";     
    110             } else { 
    111                 if( ! is_null( $data ) ) $item = $ItemStr . " = ?";  
    112             } 
    113             $return[] = $data; 
    114         } 
    115  
    116         if( count( $arr ) > 1 )  $item = "( " . rtrim( $item, " OR " ) . " )"; 
    117         $this->setWhere( $item ); 
    118         return $return; 
    119     } 
    120  
    121     // NULL値が必要な場合 
    122     function setItemTermWithNull( $arr, $ItemStr ) { 
    123  
    124         $item = " ${ItemStr} IS NULL "; 
    125          
    126         if ( $arr ){ 
    127             foreach( $arr as $data ) {   
    128                 if ($data != "不明") { 
    129                     $item .= " OR ${ItemStr} = ?"; 
    130                     $return[] = $data; 
    131                 } 
    132             } 
    133         } 
    134          
    135         $item = "( ${item} ) "; 
    136         $this->setWhere( $item ); 
    137         return $return; 
    138     } 
    139     // NULLもしくは''で検索する場合 
    140     function setItemTermWithNullAndSpace( $arr, $ItemStr ) { 
    141         $count = count($arr); 
    142         $item = " ${ItemStr} IS NULL OR ${ItemStr} = '' "; 
    143         $i = 1; 
    144         if ( $arr ){ 
    145             foreach( $arr as $data ) {   
    146                 if ($i == $count) break; 
    147                 $item .= " OR ${ItemStr} = ?";   
    148                 $return[] = $data; 
    149                 $i ++; 
    150             } 
    151         } 
    152         $item = "( ${item} ) "; 
    153         $this->setWhere( $item ); 
    154         return $return; 
    155     } 
    156      
    157  
    158  
    159     /* 複数のカラムでORで優先検索する場合 例: AND ( item_flag1 = xxx OR item_flag2 = xxx OR item_flag3 = xxx  ) AND ...  
    160  
    161         配列の構造例  
    162         if ( $_POST['show_site1'] ) $arrShowsite_1 = array( "column" => "show_site1", 
    163                                                             "value"  => $_POST['show_site1'] ); 
    164  
    165     */ 
    166     function setWhereByOR( $arrWhere ){ 
    167  
    168         $count = count( $arrWhere ); 
    169  
    170         for( $i = 0; $i < $count; $i++ ) { 
    171  
    172             if( isset( $arrWhere[$i]["value"] ) ) $statement .= $arrWhere[$i]["column"] ." = '" . addslashes( $arrWhere[$i]["value"] ) ."' OR "  ; 
    173         } 
    174  
    175         $statement = "( " . rtrim( $statement, " OR " ) . " )"; 
    176  
    177         if( $this->where ) { 
    178  
    179             $this->where .= " AND " . $statement; 
    180  
    181         } else { 
    182  
    183             $this->where = "WHERE " . $statement; 
    184         } 
    185     } 
    186  
    187     function setWhere($where){ 
    188         if ($where != "") {      
    189             if( $this->where ) { 
    190      
    191                 $this->where .= " AND " . $where; 
    192      
    193             } else { 
    194      
    195                 $this->where = "WHERE " . $where; 
    196             } 
    197         } 
    198     } 
    199  
    200     function setOrder($order){ 
    201          
    202             $this->order =  "ORDER BY " . $order; 
    203          
    204     } 
    205  
    206     function setGroup( $group ) { 
    207          
    208         $this->group =  "GROUP BY " . $group; 
    209          
    210     } 
    211  
    212      
    213     function setLimitOffset( $limit, $offset ){ 
    214  
    215         if ( is_numeric($limit) and is_numeric($offset) ){ 
    216  
    217             $this->limit = " LIMIT " .$limit; 
    218             $this->offset = " OFFSET " .$offset; 
    219         }    
    220     } 
    221      
    222     function clearSql(){ 
    223         $this->select = ""; 
    224         $this->where = ""; 
    225         $this->group = ""; 
    226         $this->order = ""; 
    227         $this->limit = ""; 
    228         $this->offset = ""; 
    229     } 
    230      
    231     function setSelect($sql) { 
    232         $this->select = $sql; 
    233     } 
     10 
     11    var $sql; 
     12 
     13    var $select; 
     14    var $where; 
     15    var $order; 
     16    var $group; 
     17    var $limit; 
     18    var $offset; 
     19    var $arrSql; 
     20    var $arrVal; 
     21 
     22    //-- コンストラクタ。 
     23    function SC_SelectSql($array = "") { 
     24        if (is_array($array)) { 
     25            $this->arrSql = $array; 
     26        } 
     27    } 
     28 
     29    //-- SQL分生成 
     30    function getSql( $mode = "" ){ 
     31        $this->sql = $this->select ." ". $this->where ." ". $this->group ." "; 
     32 
     33        // $mode == 1 は limit & offset無し 
     34        if ($mode == 2) { 
     35            $this->sql .= $this->order; 
     36        }elseif ( $mode != 1 ){ 
     37            $this->sql .= $this->order . " " .$this->limit ." ". $this->offset; 
     38        } 
     39 
     40        return $this->sql; 
     41    } 
     42 
     43        // 検索用 
     44    function addSearchStr($val) { 
     45        $return = sfManualEscape($val); 
     46        $return = "%" .$return. "%"; 
     47        return $return; 
     48    } 
     49 
     50    //-- 範囲検索(○ ~ ○ まで) 
     51    function selectRange($from, $to, $column) { 
     52 
     53        // ある単位のみ検索($from = $to) 
     54        if(  $from == $to ) { 
     55            $this->setWhere( $column ." = ?" ); 
     56            $return = array($from); 
     57        // ~$toまで検索 
     58        } elseif(  strlen($from) == 0 && strlen($to) > 0 ) { 
     59            $this->setWhere( $column ." <= ? "); 
     60            $return = array($to); 
     61        // ~$from以上を検索 
     62        } elseif(  strlen($from) > 0 && strlen($to) == 0 ) { 
     63            $this->setWhere( $column ." >= ? "); 
     64            $return = array($from); 
     65        // $from~$toの検索 
     66        } else { 
     67            $this->setWhere( $column ." BETWEEN ? AND ?" ); 
     68            $return = array($from, $to); 
     69        } 
     70        return $return; 
     71    } 
     72 
     73    //-- 期間検索(○年○月○日か~○年○月○日まで) 
     74    function selectTermRange($from_year, $from_month, $from_day, $to_year, $to_month, $to_day, $column) { 
     75 
     76        // FROM 
     77        $date1 = $from_year . "/" . $from_month . "/" . $from_day; 
     78 
     79        // TO 
     80        $date2 = mktime (0, 0, 0, $to_month, $to_day,  $to_year); 
     81        $date2 = $date2 + 86400; 
     82        // SQL文のdate関数に与えるフォーマットは、yyyy/mm/ddで指定する。 
     83        $date2 = date('Y/m/d', $date2); 
     84 
     85        // 開始期間だけ指定の場合 
     86        if( ( $from_year != "" ) && ( $from_month != "" ) && ( $from_day != "" ) && ( $to_year == "" ) && ( $to_month == "" ) && ( $to_day == "" ) ) { 
     87            $this->setWhere( $column ." >= '" . $date1 . "'"); 
     88        } 
     89 
     90        // 開始〜終了 
     91        if( ( $from_year != "" ) && ( $from_month != "" ) && ( $from_day != "" ) && 
     92            ( $to_year != "" ) && ( $to_month != "" ) && ( $to_day != "" ) ) { 
     93            $this->setWhere( $column ." >= '" . $date1 ."' AND ". $column . " < date('" . $date2 . "')" ); 
     94        } 
     95 
     96        // 終了期間だけ指定の場合 
     97        if( ( $from_year == "" ) && ( $from_month == "" ) && ( $from_day == "" ) && ( $to_year != "" ) && ( $to_month != "" ) && ( $to_day != "" ) ) { 
     98            $this->setWhere( $column ." < date('" . $date2 . "')"); 
     99        } 
     100        return $return; 
     101    } 
     102 
     103    // checkboxなどで同一カラム内で単一、もしくは複数選択肢が有る場合 例: AND ( sex = xxx OR sex = xxx OR sex = xxx  ) AND ... 
     104    function setItemTerm( $arr, $ItemStr ) { 
     105 
     106        foreach( $arr as $data ) { 
     107 
     108            if( count( $arr ) > 1 ) { 
     109                if( ! is_null( $data ) ) $item .= $ItemStr . " = ? OR "; 
     110            } else { 
     111                if( ! is_null( $data ) ) $item = $ItemStr . " = ?"; 
     112            } 
     113            $return[] = $data; 
     114        } 
     115 
     116        if( count( $arr ) > 1 )  $item = "( " . rtrim( $item, " OR " ) . " )"; 
     117        $this->setWhere( $item ); 
     118        return $return; 
     119    } 
     120 
     121    // NULL値が必要な場合 
     122    function setItemTermWithNull( $arr, $ItemStr ) { 
     123 
     124        $item = " ${ItemStr} IS NULL "; 
     125 
     126        if ( $arr ){ 
     127            foreach( $arr as $data ) { 
     128                if ($data != "不明") { 
     129                    $item .= " OR ${ItemStr} = ?"; 
     130                    $return[] = $data; 
     131                } 
     132            } 
     133        } 
     134 
     135        $item = "( ${item} ) "; 
     136        $this->setWhere( $item ); 
     137        return $return; 
     138    } 
     139    // NULLもしくは''で検索する場合 
     140    function setItemTermWithNullAndSpace( $arr, $ItemStr ) { 
     141        $count = count($arr); 
     142        $item = " ${ItemStr} IS NULL OR ${ItemStr} = '' "; 
     143        $i = 1; 
     144        if ( $arr ){ 
     145            foreach( $arr as $data ) { 
     146                if ($i == $count) break; 
     147                $item .= " OR ${ItemStr} = ?"; 
     148                $return[] = $data; 
     149                $i ++; 
     150            } 
     151        } 
     152        $item = "( ${item} ) "; 
     153        $this->setWhere( $item ); 
     154        return $return; 
     155    } 
     156 
     157 
     158 
     159    /* 複数のカラムでORで優先検索する場合 例: AND ( item_flag1 = xxx OR item_flag2 = xxx OR item_flag3 = xxx  ) AND ... 
     160 
     161        配列の構造例  
     162        if ( $_POST['show_site1'] ) $arrShowsite_1 = array( "column" => "show_site1", 
     163                                                            "value"  => $_POST['show_site1'] ); 
     164 
     165    */ 
     166    function setWhereByOR( $arrWhere ){ 
     167 
     168        $count = count( $arrWhere ); 
     169 
     170        for( $i = 0; $i < $count; $i++ ) { 
     171 
     172            if( isset( $arrWhere[$i]["value"] ) ) $statement .= $arrWhere[$i]["column"] ." = '" . addslashes( $arrWhere[$i]["value"] ) ."' OR "  ; 
     173        } 
     174 
     175        $statement = "( " . rtrim( $statement, " OR " ) . " )"; 
     176 
     177        if( $this->where ) { 
     178 
     179            $this->where .= " AND " . $statement; 
     180 
     181        } else { 
     182 
     183            $this->where = "WHERE " . $statement; 
     184        } 
     185    } 
     186 
     187    function setWhere($where){ 
     188        if ($where != "") { 
     189            if( $this->where ) { 
     190 
     191                $this->where .= " AND " . $where; 
     192 
     193            } else { 
     194 
     195                $this->where = "WHERE " . $where; 
     196            } 
     197        } 
     198    } 
     199 
     200    function setOrder($order){ 
     201 
     202            $this->order =  "ORDER BY " . $order; 
     203 
     204    } 
     205 
     206    function setGroup( $group ) { 
     207 
     208        $this->group =  "GROUP BY " . $group; 
     209 
     210    } 
     211 
     212 
     213    function setLimitOffset( $limit, $offset ){ 
     214 
     215        if ( is_numeric($limit) and is_numeric($offset) ){ 
     216 
     217            $this->limit = " LIMIT " .$limit; 
     218            $this->offset = " OFFSET " .$offset; 
     219        } 
     220    } 
     221 
     222    function clearSql(){ 
     223        $this->select = ""; 
     224        $this->where = ""; 
     225        $this->group = ""; 
     226        $this->order = ""; 
     227        $this->limit = ""; 
     228        $this->offset = ""; 
     229    } 
     230 
     231    function setSelect($sql) { 
     232        $this->select = $sql; 
     233    } 
    234234} 
    235235?> 
Note: See TracChangeset for help on using the changeset viewer.