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

时间:2011-06-27 12:32:28

标签: php mysql

我有一个搜索db中用户的脚本。我有两个输入字段,以便我可以搜索例如城市和门牌号码。我想要的是如果我输入例如伦敦在城市领域和数字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)组合时提供正确$ $结果的东西。因此,让我更容易搜索。

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

6 个答案:

答案 0 :(得分:2)

如果您想运行2个查询并获得1个结果集,那么您应该查看UNION查询

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

请尝试使用以下逻辑 -

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");

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我相信你可以使用带括号的另一个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可能看起来更干净,正如其他答案所暗示的那样。

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

答案 5 :(得分:0)

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;

}