我有一个搜索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)组合时提供正确$ $结果的东西。因此,让我更容易搜索。
希望我能很好地表达我的问题,让你理解我,我希望你能帮助我!
答案 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;
}