2014-05-07 15 views
0

我問這個沒有代碼,因爲我想知道很多方法如何不是返回行?我現在使用的只是不太整潔。我現在使用的是'1 = 2',它總是在任何行中返回。如何不返回行

所以我問的是如何不返回在SQL語句中的行一個很好和整潔的方式。

UPDATE:

$sql = 'SELECT `a`.`id`, 
        `a`.`action_id`, 
        DATE_FORMAT(FROM_UNIXTIME(a.`time`), "%d-%m-%Y") as `date`, 
        DATE_FORMAT(FROM_UNIXTIME(a.`time`), "%H:%i") as `time`, 
        `a`.`amount_other_callers`, 
        `a`.`additional_data_incident`, 
        `a`.`additional_data_result`, 
        `a`.`additional_data_messagequality_start`, 
        `a`.`additional_data_messagequality_end`, 
        `a`.`additional_data_smsquality_start`, 
        `g`.`name` AS gemeente 
     FROM `actions` a 
     INNER JOIN actions_geo_communities AS ac 
      ON ac.lnk_action_id = a.id 
     INNER JOIN geodata_communities g 
      ON ac.lnk_community_id = g.id '; 
    if(Auth::user()->unit_id > 0) { 
     $sql.= ' INNER JOIN actions_geo_units AS au 
         ON au.lnk_action_id = a.id '; 
    } 
    if(Session::get('tk') === "1" && Session::get('ntk') === "1") 
    { 
     $sql.= ' WHERE `a`.`aangevuld` = 0 AND `a`.time > 1388530800'; 
    } 
    else if (Session::get('tk') == 1) 
    { 
     $sql.= ' WHERE `a`.`aangevuld` = 0 AND `a`.`tk` = 1 AND `a`.time > 1388530800'; 
    } 
    else if (Session::get('ntk') == 1) 
    { 
     $sql.= ' WHERE `a`.`aangevuld` = 0 AND `a`.`tk` = 0 AND `a`.time > 1388530800'; 
    } 
    else 
    { 
     $sql.= ' WHERE 1=2'; 
    } 
    if(Auth::user()->unit_id > 0) { 
     $sql.= ' AND `au`.`lnk_unit_id` = ' . Auth::user()->unit_id . ' '; 
    }  
    if(!empty($not_arr)) { 
     $sql.= ' AND `a`.`id` NOT IN (' . implode(',', $not_arr) . ') '; 
    } 
+1

你能提供不需要任何數據,因此,爲什麼你強調你的數據庫

你的情況檢查一個例子? –

+6

不檢索行的最有效方法是不運行查詢。 –

+0

@RagingBull我不想在這裏舉一個例子,因爲必須有一個通用的方法。 – user3398922

回答

3

對此的最佳答案是不運行查詢,你如果兩個或一個複選框被選中第一個,然後運行查詢,否則不要運行它在所有

1

我有當某個模塊需要增加其他模塊已組裝的SQL這種情況。根據我事先知道的傳入SQL部分的結構,我做了其中一個:當我剛剛有一個WHERE條件時,我將它轉換爲FALSE AND (<original_where),或者如果它沒有中斷其他模塊,則簡單地爲FALSE。在其他情況下(當複雜的查詢有多個WHERE子句和WHERE之後的其他子句時)我有幸系統沒有使用LIMIT,所以我可以自由追加LIMIT 0