新手發問
如題
<?php
if(isset($_GET["q"]))
{
$sql_query = "SELECT * FROM `search` WHERE `keyword` LIKE '%".$_GET["q"]."%'";
$result = mysqli_query($connect, $sql_query);
$num_rows = mysqli_num_rows($result);
if (!$result) {
printf("Error: %s\n", mysqli_error($connect));
exit();
}
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
echo '<tr><td>'.$row["title"].'</td></tr>';
}
}
else
{
echo '<label>No results were found</label>';
}
}
?>
假如搜尋 mysql 中的一項 keyword 有 Apple , Banana , Pumpkin
在 search form 同時輸入其中兩個 keyword: Apple 空格 Pumpkin
可以成功 echo 出對應的 title
請問該如何修改
SELECT * FROM `search` WHERE `keyword` LIKE '%Apple%' AND `keyword` LIKE '%Pumpkin%'
你要的是這樣嗎?
如果你的結果是 只要符合 Apple
Pumpkin
其中一項的話
SELECT * FROM `search` WHERE `keyword` LIKE '%Apple%' OR `keyword` LIKE '%Pumpkin%';
如果你的結果是 Apple
Pumpkin
都要有的話
SELECT * FROM `search` WHERE `keyword` LIKE '%Apple%' AND `keyword` LIKE '%Pumpkin%';
如果你的結果是 要開頭 Apple
結尾 Pumpkin
的話
SELECT * FROM `search` WHERE `keyword` rlike '(^Apple.*Pumpkin$)';
自己挑
$sql_query = "SELECT * FROM `search` WHERE `keyword` LIKE '%".$_GET["q"]."%'";
改成
$arrkeywords = "('".str_replace(" ","','",$_GET["q"])."')";
$sql_query = "SELECT * FROM `search` WHERE `keyword` IN ".$arrkeywords;
雙11加送一個 LIKE 版
$arrlike = " `keyword` LIKE '%".str_replace(" ","%' OR `keyword` LIKE '%",$_GET["q"])."%'";
$sql_query = "SELECT * FROM `search` WHERE ".$arrlike;
選我正解
對於這種不固定組數的查詢,用 like 不妥,因為您不知道使用者會輸入幾組,
萬一她輸入5個關鍵字,那您要用5個 like 嗎?
請去搜尋關鍵字
mysql regexp
$sql_query = "SELECT * FROM `search` WHERE `keyword` LIKE '%".$_GET["q"]."%'";
把上面這行改成下面兩行
// 將查詢字串的分隔符號改成regex的 '或'
$regex = str_replace(' ','|',str_replace(',','|',$_GET["q"]));
$sql_query = "SELECT * FROM `search` WHERE `keyword` REGEXP '$regex'";