gpt4 book ai didi

php - MySQL 使用 IN、LIKE 和 OR

转载 作者:行者123 更新时间:2023-11-29 12:22:37 24 4
gpt4 key购买 nike

我正在尝试编写一个搜索算法,没什么太高级的,但它不仅仅是 WHERE field1 = 'searchtext'。我正在尝试跨多个字段搜索所有关键字。

我做了一些搜索,似乎我对此事的看法不符合 MySQL 将“IN”与其他函数一起使用的做法,但是我在 stackoverflow 上找不到任何似乎建议更好的方法的内容或在独立博客和其他教程网站上使用 Google。

$fields = array('type','suburb','postcode','address');      // Fields in db being searched
$queried = $db->real_escape_string($_REQUEST['keyword']); // Input from form
$keys = explode(" ",$queried); // Determine individual keywords
$sql = "SELECT * FROM `properties` WHERE "; // Beginning of SQL Statement

$frc = 0; // Field Counter
foreach($fields as $f){
$inner = ''; // Reset $inner each run
$irc = 0; // Reset Inner Counter each run
$frc++; // Increase Field Counter
if($frc != 1){ $sql .= " OR "; } // All except first runthrough
$sql .= "`".$f."` IN "; // `field` IN
foreach($keys as $k){
$irc++; // Increase inner counter
if($irc == 1){
$inner .= "('%".$k."%'"; // First Inner per run (aka each keyword)
}else{
$inner .= ", '%".$k."%'"; // All other Inners
}
}
$inner .= ")"; // Inner finishes run before reset
$sql .= $inner; // Add Inner to SQL ready for query
}
$sql .= ";"; // Clean finish to SQL statement

$SearchProperties = $db->query($sql); // Run Query

我添加了注释,以帮助您理解我凌乱的代码以及我感觉自己在做什么。该代码给了我预期的输出,例如,如果我搜索关键字“house”,我的输出如下;

$queried = house 3064
$sql = SELECT * FROM `properties` WHERE `type` IN ('%house%', '%3064%') OR `suburb` IN ('%house%', '%3064%') OR `postcode` IN ('%house%', '%3064%') OR `address` IN ('%house%', '%3064%');

type列中,有house和townhouse,它应该能够同时命中两者,并且应该命中邮政编码为3064的任何内容,无论它在另一列中是否有house(根据我的内容)想要完成)

然而,经过几个小时的搜索,尽管我的输出符合预期,但我不相信它是正确的。有人可以帮助阐明解决我的困惑的正确方法以及为什么这不起作用吗?我总是喜欢理解这些误解并从中学习。

感谢您的帮助。

最佳答案

如果您有通配符,您需要 like 而不是 in:

SELECT *
FROM `properties`
WHERE (`type` LIKE '%house%') OR
(`suburb` LIKE '%house%') OR
(`postcode` LIKE '%house%') OR
(`address` LIKE '%house%');

但是,我强烈建议您研究全文索引(请参阅 here )。使用 MATCH() 可以大大简化您的工作。

编辑:

您的查询仍然不正确。而且你应该仍然使用like:

SELECT *
FROM `properties`
WHERE (`type` LIKE '%house%' or type like '%3064%') OR
(`suburb` LIKE '%house%' or suburb like '%3064%') OR
(`postcode` LIKE '%house%' or postcode like '%3064%') OR
(`address` LIKE '%house%' or address like '%3064%');

关于php - MySQL 使用 IN、LIKE 和 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28793700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com