如何不返回行

时间:2014-05-07 09:54:34

标签: mysql laravel rows

我在没有代码的情况下问这个问题,因为我想知道很多方法如何 NOT 返回行?我现在使用的并不是那么整洁。我现在使用的是' 1 = 2'它总是在没有行的情况下返回。

所以我问的是如何在sql语句中不返回行的一个很好的方法。

更新

$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) . ') ';
    }

2 个答案:

答案 0 :(得分:3)

最佳答案不是运行查询,您不需要任何数据,所以为什么要对数据库施加压力

您的情况中,检查是否先检查了两个或一个复选框,然后运行您的查询,否则根本不运行

答案 1 :(得分:1)

当模块需要增加其他模块组装的SQL时,我遇到过这种情况。基于我事先了解的传入SQL部分的结构,我做了其中一个:当我刚刚有一个WHERE条件时,我将其转换为FALSE AND (<original_where),或者如果它没有破坏其他模块则简单地为FALSE。在其他情况下(当复杂查询有多个WHERE子句和WHERE之后的其他子句时)我很幸运,系统没有使用LIMIT,所以我可以自由地追加LIMIT 0