我的搜索SQL当前检索提交的文本和最多17个类似的匹配。
我还需要相同的表单输入来接受多个单词(用空格分隔)并通过完全匹配检索相应的数据而没有相似的。
这就是我现在所拥有的 -
ff
我收到以下错误 -
$word=$_POST['word'];
$word = explode(" ", $word);
$searchString = $whereClause = "";
foreach($words as $word){
$searchString .= " OR word_eng LIKE '%".$word."%'";
}
$whereClause = ($searchString != "") ? " WHERE ".preg_replace('/OR/',
'', $searchString, 1) : $whereClause;
$sql = "SELECT word_eng FROM words ".$whereClause." LIMIT 17 ";
echo $sql;
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["word_eng"];
}
和echo $ sql告诉我
Warning: Invalid argument supplied for foreach() in /home/foneti2/public_html/howjsay/201701/searchResult.php on line 10
从数据库获取我不想要的所有单词
更新
非常感谢你们,我已经让它满足了我的需求,但我还有一个小问题 - 当从数据库中检索多个单词时,它们没有按照放入输入框的相同顺序检索。有什么建议?
SELECT word_eng FROM words LIMIT 17
三江源
答案 0 :(得分:0)
如果我明白你的意思,你有一个输入,并希望从这个输入中检索数据。它由用空格分隔的单词组成。 尝试这样的事情:
$sql="SELECT word_eng FROM words WHERE word_end LIKE '%" . $word . "%' AND word_end LIKE '%" . $word2 . "%' LIMIT 17";
为了优化它,您可以为您的单词做一个foreach,在其中,您通过添加一个AND ***来“更新”您的$ sql字符串。
在你的foreach之后,只需添加你的LIMIT 17
答案 1 :(得分:0)
正如您在问题中提到的,多个单词以空格分隔。
<?php
$words = "Hi All This Is Testing";
//The explode() function breaks a string into an array.
//Since, words are separated by spaces
$words = explode(" ", $words);
$searchString = $whereClause = "";
foreach($words as $word){
$searchString .= " OR word_eng LIKE '%".$word."%'";
}
$whereClause = ($searchString != "") ? " WHERE ".preg_replace('/OR/', '', $searchString, 1) : $whereClause;
$sql = "SELECT word_eng FROM words ".$whereClause." LIMIT 17 ";
echo $sql;
?>
案例1: 如果$searchString
不为空。
输出: SELECT word_eng FROM words WHERE word_eng LIKE'%Hi%'或word_eng LIKE'%All%'或word_eng LIKE'%This%'或word_eng LIKE'%Is% '或word_eng LIKE'%Testing%'LIMIT 17
案例2: 如果$searchString
为空。
输出: SELECT word_eng FROM words LIMIT 17
<强>解释强>
使用explode(),所有单词(以空格分隔)现在都存储在数组中。循环每个单词并附加$searchString
。然后,如果$searchString
不为空,则将第一次出现的OR从$searchString
替换为preg_replace。