2012-01-16 97 views
0

我工作的一個開放源代碼的腳本。 (https://github.com/keverw/Random-Quotes)簡單的MySQL搜索引擎

SELECT * FROM quotes WHERE text LIKE '%$searchTermbox%' AND OR author LIKE '%$searchTermbox%' LIMIT 15 

我試圖讓在那裏搜索文本和作者一個簡單的搜索引擎,也將不會有重複。有任何想法嗎?所以如果我輸入「Kevin」,它會顯示兩個作者的姓名和Quotes提及他們。

左右,或者是因爲有些事情他們都將提到它或它們都不會....任何想法如何寫這樣的事情很簡單呢?我對MySQL非常基本。

id | text | time | author | approved是結構。還批准需求= 1

+1

你能展示你的表結構嗎? – 2012-01-16 09:15:14

+0

@Sergey我知道我忘記了一些東西......謝謝!添加它。 – Keverw 2012-01-16 09:18:22

回答

2

你不需要AND

SELECT * 
FROM quotes 
WHERE text LIKE '%$searchTermbox%' 
    OR author LIKE '%$searchTermbox%' 
LIMIT 15 

這將選擇其中文本或作者或兩者都包含$searchTermbox所有報價。

這是因爲使用OR時,所述AND情況下被覆蓋也是如此。默認情況下,a OR b表示a, b or both。在使用LIKE '%...'

+0

謝謝!有用! – Keverw 2012-01-16 09:37:09

1

注意一般是低效率的,因爲它需要在單獨掃描表中的所有記錄,而不能採取索引的優勢。通常,對於這類問題,更有效的方法是使用MySQL支持的全文索引(請參閱,例如,http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)。

此方法需要首先創建全文索引(一次性操作),然後使用專用語法查詢數據(以代替LIKE運算符)。

要建立全文索引(假設報價是MyISAM表),你可以使用:

ALTER TABLE quotes ADD FULLTEXT (author, text); 

然後等效查詢表達式可以寫爲:

SELECT * FROM quotes WHERE MATCH (author, text) AGAINST ('$searchTermbox') 
    AND APPROVED=1 
    LIMIT 15; 

這應該提供與前面的查詢結果相同,但可能會明顯更快,特別是在數據庫很大的情況下。