在表单输入中输入多个单词并从数据库中检索相应的数据

时间:2017-08-24 13:58:26

标签: php jquery sql

我的搜索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

三江源

2 个答案:

答案 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