iT邦幫忙

0

MYSQL PHP 搜尋多個關鍵字

新手發問
如題

<?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
請問該如何修改

deschain iT邦新手 5 級 ‧ 2019-11-10 16:43:06 檢舉
我希望的是在 search bar
輸入不管一組 或 二組 keyword
都能成資料庫裡找出符合的
不只限於 apple 或 pumpkin
柯柯 iT邦新手 5 級 ‧ 2019-11-12 10:49:10 檢舉
如果說 使用者都是用空白去分的話
PHP
$strArr = explode(" ",$_GET['q']);
foreach($strArr => $value){
$row[] = " `keyword` like '%" . $value . "%' ";
}
$sql = "SELECT * FROM `search` WHERE " . join(' or ',$row) ;

不過SQL組出來應該滿難看的 哈哈
如果 使用者會用,或其他符號去區分的話
可以用 strpos 這個函數去檢查有沒有,或其他符號
在explode的時候去切割
3
小魚
iT邦大師 1 級 ‧ 2019-11-10 13:38:19
SELECT * FROM `search` WHERE `keyword` LIKE '%Apple%' AND `keyword` LIKE '%Pumpkin%'

你要的是這樣嗎?

看更多先前的回應...收起先前的回應...
deschain iT邦新手 5 級 ‧ 2019-11-10 16:45:11 檢舉

這樣如果 keyword 是 apple 和 pumpkin 以外的就沒做用了耶

小魚 iT邦大師 1 級 ‧ 2019-11-10 19:42:48 檢舉

都這樣子寫了還看不懂嗎?
我可以跟你教學,
算鐘點費.

debr979 iT邦新手 5 級 ‧ 2019-11-11 09:19:15 檢舉

樓主應該不熟資料庫語句?

小魚 iT邦大師 1 級 ‧ 2019-11-11 09:40:35 檢舉

SQL不熟的話要先做功課,
可以Google一下SQL語法
這邊有一個 SQL語法教學

米歐 iT邦新手 4 級 ‧ 2019-11-11 17:55:57 檢舉

他可能想要你提供切割輸入字串與重組SQL字串的方法
/images/emoticon/emoticon06.gif

1
dragonH
iT邦大師 1 級 ‧ 2019-11-10 14:41:04

SQLFiddle

如果你的結果是 只要符合 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$)';

自己挑

0
海綿寶寶
iT邦大神 1 級 ‧ 2019-11-10 17:35:02
$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;

選我正解

小魚 iT邦大師 1 級 ‧ 2019-11-10 19:41:49 檢舉

IN 沒辦法 LIKE 吧...

0
ckp6250
iT邦新手 3 級 ‧ 2019-11-10 22:30:29

對於這種不固定組數的查詢,用 like 不妥,因為您不知道使用者會輸入幾組,
萬一她輸入5個關鍵字,那您要用5個 like 嗎?
請去搜尋關鍵字
mysql regexp

1
老鷹(eagle)
iT邦高手 1 級 ‧ 2019-11-11 11:05:03

手上沒有MySQL 不過可以看一下這篇文章 這篇文章是用 REGEXP來解

https://stackoverflow.com/questions/1127088/mysql-like-in

ckp6250 iT邦新手 3 級 ‧ 2019-11-11 17:14:30 檢舉

+1

0
阿展展展
iT邦好手 1 級 ‧ 2019-11-12 06:38:58

贊同 @ckp6250

對於這種不固定組數的查詢,用 like 不妥

你這樣子 Like 會變得很詭異

0
舜~
iT邦研究生 2 級 ‧ 2019-11-12 14:43:56
$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'";

我要發表回答

立即登入回答