当搜索字符串为空时,带有连接的搜索查询显示所有行

Posted

技术标签:

【中文标题】当搜索字符串为空时,带有连接的搜索查询显示所有行【英文标题】:search query with join shows all rows when searched string is empty 【发布时间】:2018-11-22 09:28:43 【问题描述】:

我有一个查询要在两个表中搜索一个空缺。

此查询的变量通过具有多个输入/选择的表单发送。一个是空缺标题的文本输入,另一个是包含空缺可以属于的所有类别的下拉列表。

当我将文本输入留空并仅选择一个类别时,我会得到所有空缺,而不仅仅是所选类别中的空缺。

我的查询:

$functie = $_POST['functie'];
$branche = $_POST['branche'];
$regio = $_POST['regio'];

$search = "
SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias
FROM snm_content cnt
LEFT JOIN snm_categories cat
ON cat.id = cnt.catid
WHERE ('".$functie."' ='' OR cnt.title LIKE '%".$functie."%')
OR ('".$branche."' ='' OR cat.title LIKE '%".$branche."%')
";

如果我在不输入文本输入的情况下回显查询,这就是我得到的结果:

SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias
FROM snm_content cnt
LEFT JOIN snm_categories cat
ON cat.id = cnt.catid
WHERE ('' ='' OR cnt.title LIKE '%%')
OR ('logistiek' ='' OR cat.title LIKE '%logistiek%')

snm_content 是职位空缺,snm_categories 是类别。

如何只显示属于所选类别的职位空缺?

【问题讨论】:

@MadhurBhaiya 是的,我忘记了,我现在接受。 【参考方案1】:

请注意您的代码容易受到与SQL injection 相关的攻击。请学会使用Prepared Statements

现在,我们需要动态生成查询的WHERE 部分。我们可以使用!empty()函数来检查输入的过滤值是否不为空,然后将其条件动态添加到查询中。

$functie = $_POST['functie'];
$branche = $_POST['branche'];
$regio = $_POST['regio'];

$search = "
SELECT cnt.title, cnt.alias, cnt.images, cnt.introtext, cnt.catid, cat.title, cat.alias
FROM snm_content cnt
LEFT JOIN snm_categories cat
ON cat.id = cnt.catid ";

// Collect all the where conditions in an array
$whr = array();

// check if $functie has some value in input filter
if (!empty($functie)) 
    $whr[] = "cnt.title LIKE '%" . $functie . "%'";


// check if $branche has some value in input filter
if (!empty($branche)) 
    $whr[] = "cat.title LIKE '%" . $branche . "%'";


$where_sql = '';
// Prepare where part of the SQL
if (!empty($whr)) 

    $where_sql = ' WHERE ' . implode(' OR ', $whr);


// Append to the original sql
$search .= $where_sql;

【讨论】:

以上是关于当搜索字符串为空时,带有连接的搜索查询显示所有行的主要内容,如果未能解决你的问题,请参考以下文章

当我的搜索字段为空时,如何在不搜索结果的情况下呈现页面,但在搜索时仍然异步呈现?

我的自定义搜索视图无法正常工作,当搜索输入为空时不显示原始列表

仅当搜索框不为空时才显示项目匹配内容

字段为空时为 UISearchBar 启用“搜索”按钮? (IOS 7)

仅当搜索栏文本不为空时,如何运行过滤器功能?

搜索结果为空时 UITableView 中的 UISearchController 崩溃