2011-09-08 66 views
1

我有一個項目的每個狀態的搜索框!這是做mysql查詢的正確方法

當我搜索時,這是正確的方法嗎?

SELECT * 
FROM (`site_pages`) 
WHERE `title` LIKE '%php%' 
OR `content` LIKE '%php%' 
HAVING `status` != 'deleted' 
AND `status` != 'concept' 

如果沒有搜索致力於我只是用

... WHERE'status' != 'deleted' AND 'status' != 'concept' 

回答

4

一些改進可能:

  • 沒有理由使用having,你應該簡單地追加額外where條件。

  • 您可以創建一個statuses表,爲刪除的/概念值分配數字表示,允許您輕鬆更改狀態的名稱添加/枚舉所有現有狀態。這減少了存儲許多冗餘文本字段的開銷,並大大提高了與狀態字段比較的速度,數字比較比字符串比較快得多。

  • 您也可能希望將「已刪除」狀態放入每條記錄的列中。就目前而言,記錄可以是概念或刪除,但不是被刪除的概念。如果你想取消刪除一個記錄怎麼辦?您已經失去了預先刪除的狀態。這是通常如何非破壞性地刪除記錄的方式;要麼通過激活deleted位,要麼取消激活active位。

否則它看起來像很標準的SQL。

+0

你的權利!我看着這一切都錯了。我將爲刪除和概念狀態製作單獨的論壇。謝謝 –

2

HAVING用於聚合查詢(即使用GROUP BY的查詢)。你最後的兩個條件應該合併到你的WHERE區塊。此外,我不認爲你需要圍繞表名稱的括號。

您會發現隨着數據的增長,使用LIKE這樣的功能可能表現不佳,但您使用它的方式沒有任何合成錯誤。