简体   繁体   English

SQL字符串与if语句串联

[英]SQL string concatenation with if statement

I have simple query for full text search, data comes from HTML form inputs. 我有用于全文搜索的简单查询,数据来自HTML表单输入。 If statement checks or it was filled all three inputs with array_key_exists and then concatenate all strings, but if someone didn't fill first or second input and then my query WHERE part is WHERE AND contract = $var so in this situation AND is not needed. 如果语句检查或用array_key_exists填充了所有三个输入,然后将所有字符串连接在一起,但是如果有人没有填充第一个或第二个输入,则我的查询WHERE部分是WHERE AND contract = $var因此在这种情况下并且不需要。 What is solution for my problem, how i can solve this? 什么是我的问题的解决方案,我该如何解决? When AND is needed just add to query string and when didn't needed don't add. 当需要AND时,只需将其添加到查询字符串中,而在不需要时则不添加。

    $sql = "SELECT 
                slug, 
                title, 
                company, 
                location, 
                email, 
                street, 
                city, 
                phone, 
                url, 
                description, 
                image, 
                created_at 
                FROM jobs
                WHERE ";

    array_key_exists('paieska', $segment) ? $sql .= "MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') " : '';
    array_key_exists('darbo-laikas', $segment) ? $sql .= "AND contract = '".$segment['darbo-laikas']."' " : '';
    array_key_exists('miestas', $segment) ? $sql .= "AND location = '".$segment['miestas']."'" : '';

The easiest solution is to just add a 1 to the original where statement (And AND before your first $sql if statement). 最简单的解决方案是在原始where语句中添加1 (在第一个$sql if语句之前, AND )。 This will always be true, and will return all the records. 这将始终是正确的,并将返回所有记录。

If darbo-laikas exists, your query would be ...FROM jobs WHERE 1 AND contract... which would work correctly. 如果存在darbo-laikas ,则您的查询将是...FROM jobs WHERE 1 AND contract...可以正常工作。

$sql = "SELECT 
            slug, 
            title, 
            company, 
            location, 
            email, 
            street, 
            city, 
            phone, 
            url, 
            description, 
            image, 
            created_at 
            FROM jobs
            WHERE 1 ";

array_key_exists('paieska', $segment) ? $sql .= "AND MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') " : '';
array_key_exists('darbo-laikas', $segment) ? $sql .= "AND contract = '".$segment['darbo-laikas']."' " : '';
array_key_exists('miestas', $segment) ? $sql .= "AND location = '".$segment['miestas']."'" : '';

try this, add 'AND' in every last statement 试试这个,在每个最后一个语句中添加“ AND”

array_key_exists('paieska', $segment) ? $sql .= "MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') AND " : '';
array_key_exists('darbo-laikas', $segment) ? $sql .= "contract = '".$segment['darbo-laikas']."' AND " : '';
array_key_exists('miestas', $segment) ? $sql .= "location = '".$segment['miestas']."' AND " : '';

before execute, delete last char('AND') using 在执行之前,使用以下命令删除最后一个char('AND')

rtrim($sql, "AND ")

note: rtrim should with whitespace, because your 'AND ' using whitespace too 注意: rtrim应该带有空格,因为您的“ AND”也使用空格

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM