繁体   English   中英

如何从2个查询中获得结果

[英]How can I get results from 2 queries

我有一个脚本搜索数据库中的用户。 我有两个输入字段,以便我可以搜索例如城市和门牌号码。 我想要的是,如果我在城市字段中输入例如伦敦,而在数字20中输入伦敦,其中包含伦敦和20。 我不太清楚如何实现这一目标。 我在Google上做了足够多的研究,但仍未找到答案。

这是我的代码:

if($_GET['search'] != ''){
$result = mysql_query("SELECT * FROM klant WHERE klant_id LIKE '%" .$search."%' OR             voornaam LIKE '%" .$search."%' OR achternaam LIKE '%" .$search."%' OR email LIKE '%"        .$search."%' OR plaats LIKE '%" .$search."%' OR bedrijfsnaam LIKE '%" .$search."%'ORDER BY       klant_id DESC");


$result2 = mysql_query("SELECT * FROM klant WHERE klant_id LIKE '%" .$search2."%' OR voornaam   LIKE '%" .$search2."%' OR achternaam LIKE '%" .$search2."%' OR email LIKE '%" .$search2."%' OR   plaats LIKE '%" .$search2."%' OR bedrijfsnaam LIKE '%" .$search2."%'ORDER BY klant_id DESC");
$i = 0;

}

我需要的是能够在这两个搜索值($ search和$ search2)组合的情况下给出正确的$ result的东西。 从而让我更容易搜索。

希望我能够很好地表达我的问题,让你了解我,我希望你能帮助我!

好吧,如果你想运行2个查询并得到1个结果集,你应该看一个UNION查询

两个查询之间的单词“UNION”(仅用于不同的值)或“UNION ALL”(允许重复)将它们连接到一个结果表中。

但是在搜索方面,我强烈建议不要使用%word%。 一旦你拥有大量数据,它将极大地降低你的搜索速度,因为SQL会遍历整个字符串的长度,以找到包含所讨论单词的任何内容。

请尝试以下逻辑 -

if($_GET['search'] != ''){
$search = $_GET['search'];
$where[] = "( klant_id LIKE '%" .$search."%' OR  voornaam LIKE '%" .$search."%' OR achternaam LIKE '%" .$search."%' OR email LIKE '%"        .$search."%' OR plaats LIKE '%" .$search."%' OR bedrijfsnaam LIKE '%" .$search."%' ) ";
}
if($_GET['search2'] != ''){
$search2 = $_GET['search2'];
$where[] = " ( klant_id LIKE '%" .$search2."%' OR voornaam   LIKE '%" .$search2."%' OR achternaam LIKE '%" .$search2."%' OR email LIKE '%" .$search2."%' OR   plaats LIKE '%" .$search2."%' OR bedrijfsnaam LIKE '%" .$search2."%') ";
}
$query_where = (is_array($where))?" WHERE ".implode(" AND ", $where):""; 
$result = mysql_query("SELECT * FROM klant ".$query_where." ORDER BY klant_id DESC");

您可以使用UNION子句例如: First Query .. UNION Second Query .. :)

我相信你可以使用带括号的另一个OR运算符:

$result = mysql_query("
    SELECT 
        * 
    FROM 
        klant 
    WHERE 
        (klant_id LIKE '%" .$search."%' OR 
        voornaam LIKE '%" .$search."%' OR 
        achternaam LIKE '%" .$search."%' OR 
        email LIKE '%".$search."%' OR 
        plaats LIKE '%" .$search."%' OR 
        bedrijfsnaam LIKE '%" .$search."%') 
    OR 
        (klant_id LIKE '%" .$search2."%' OR 
        voornaam   LIKE '%" .$search2."%' OR 
        achternaam LIKE '%" .$search2."%' OR 
        email LIKE '%" .$search2."%' OR 
        plaats LIKE '%" .$search2."%' OR 
        bedrijfsnaam LIKE '%" .$search2."%') 
    GROUP BY 
        klant_id
    ORDER BY
        klant_id DESC");

但其他答案表明,UNION可能看起来更干净。

添加分组以防止同一结果多次显示。

if($_GET['search'] != ''){

$query1 = "SELECT * FROM klant WHERE klant_id LIKE '%" .$search."%' OR voornaam LIKE '%" .$search."%' OR achternaam LIKE '%" .$search."%' OR email LIKE '%".$search."%' OR plaats LIKE '%" .$search."%' OR bedrijfsnaam LIKE '%" .$search."%'ORDER BY klant_id DESC";

$query2 = "SELECT * FROM klant WHERE klant_id LIKE '%" .$search2."%' OR voornaam   LIKE '%" .$search2."%' OR achternaam LIKE '%" .$search2."%' OR email LIKE '%" .$search2."%' OR plaats LIKE '%" .$search2."%' OR bedrijfsnaam LIKE '%" .$search2."%'ORDER BY klant_id DESC";

$result = mysql_query($query1 . ' UNION ALL ' . $query2;
$i = 0;

}

暂无
暂无

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

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