我有简单的全文搜索查询,数据来自HTML表单输入。如果语句检查或者用array_key_exists填充所有三个输入然后连接所有字符串,但如果有人没有填充第一个或第二个输入然后我的查询WHERE部分是WHERE AND contract = $var
所以在这种情况下不需要AND。什么是我的问题的解决方案,我如何解决这个问题?当需要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']."'" : '';
答案 0 :(得分:2)
最简单的解决方案是在原始where语句中添加1
(并在第一个AND
if语句之前添加$sql
。这将永远为真,并将返回所有记录。
如果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']."'" : '';
答案 1 :(得分:0)
试试这个,在每个最后一个语句中添加' 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 " : '';
执行前,使用
删除最后一个字符(' AND')rtrim($sql, "AND ")
注意: rtrim应该使用空格,因为' AND' 也使用空格