2013-03-15 89 views
1

我正在搜索我的網站,我想選擇包含用戶搜索的單詞(或單詞)的數據庫中的帖子。 我使用下面的代碼,它的工作原理,但由於我使用LIMIT 10,它可能發生在10個選定的帖子,例如,只有2個帖子包含搜索詞,所以只有2個帖子將被顯示,即使有在數據庫中包含搜索詞的帖子更多。如何從包含特定單詞的數據庫中選擇帖子?

$posts = mysql_query("SELECT * FROM posts ORDER BY id DESC LIMIT 10"); 
while($posts_row = mysql_fetch_assoc($posts)) { 
... 
$post_body = $posts_row ['post_body']; 
if (strstr($post_body, $search)) { 
echo $post_body; 
} 
... 
} 

有沒有辦法從數據庫中選擇包含搜索詞的帖子? 類似於

$posts = mysql_query("SELECT * FROM posts WHERE strstr($post_body, $search) ORDER BY id DESC LIMIT 10"); 

編輯:謝謝你的幫助和建議。

+0

數據值匹配務必閱讀有關SQL注入。 [如何在PHP中防止SQL注入?](http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php) – 2013-03-15 18:02:55

+0

在你的查詢中使用LIKE。 例如。 'SELECT * FROM posts WHERE post_body LIKE%$ search%'; – 2013-03-15 18:03:43

+0

mysql_ *函數不好!他們正在被棄用。看看mysqli或PDO – Ascherer 2013-03-15 18:14:13

回答

3

試試這個(在MySQL測試,我不知道其他人):

"SELECT * FROM posts WHERE post_body LIKE ('%".$search."%') ORDER BY id DESC LIMIT 10" 
+0

謝謝,它的作品! – 2013-03-15 18:17:49

0

您可以利用LIKE這樣做搜索。

SELECT * FROM posts WHERE post_body LIKE ('%?%') ORDER BY id DESC LIMIT 10; 

這裏post_body將任何申請賣場帖子內容和?會通過搜索字符串來代替。

0

您可以使用此作爲查詢:

SELECT * FROM posts WHERE $post_body like '%$search%' ORDER BY id DESC LIMIT 10 

這可能是非常有限和緩慢,雖然。根據您的應用程序有多大以及您擁有多少數據,您可能需要提供「全文搜索」。 Full-Text Search

1

第一:不要使用mysql_ - 它已被棄用,並且出於安全原因被淘汰。改用mysqli_。

二:使用「喜歡」這樣做:

SELECT * FROM tableName WHERE columnName LIKE '%keyword%'; 

會發現在'keyword searches are fun''Find this keyword''all keywords are words.'

相關問題