2014-07-02 20 views
-1

目標:查找所有行,其中(1)數字的消息數爲1,並且(2)消息的長度小於5個字符長度。我可以分別執行每個操作,但在將一個SQL查詢中的兩個條件組合在一起時遇到困難。按照where子句分組計數等於1

Sample Database Table: 
+-----+----------+----------+ 
| id | number | message | 
+-----+----------+----------+ 
| 1 |  100 | Test  | 
| 2 |  100 | Testing | 
| 3 |  100 | Testing | 
| 4 |  200 | Test  | 
| 5 |  201 | Test  | 
| 6 |  201 | Test  | 
| 7 |  250 | Testing | 
| 8 |  251 | Test  | 
| 9 |  300 | Testing | 
| 10 |  300 | Testing | 
+-----+----------+----------+ 

應該只返回行200和251試過以下,但沒有運氣:

SELECT * FROM `reports` WHERE LENGTH(message) < 5 GROUP BY number HAVING count(*) = '1' 

返回行,但行包含計數> 1

+1

[您的查詢](http://www.sqlfiddle.com/#!2/9221b/2)效果很好。怎麼了 ? –

+0

SQL查詢中的錯字。我編輯應該是5而不是60的長度。 –

+0

你看了演示?它很好,最新怎麼了? –

回答

1

好吧,我做出了錯誤的變化幾小時前 - 這一次我擁有和你一樣的數據。啊,現在我明白你遇到了什麼問題。你不明白MySQL解釋你的SELECT的順序;它首先在WHERE中限制結果,然後執行GROUP BY。按設計工作。

+0

啊,我明白了。謝謝。我所做的是編輯PHP腳本以創建一個臨時表,其中填充了消息的數量等於1的行。然後,在臨時表上執行第二個查詢以顯示消息長度<5的行。不是最好的或最優雅的解決方案,但有訣竅。該表的體積很小,腳本是後端管理腳本 - 該例程很少執行,因此不用擔心mySQL服務器上的加載問題。 –