2017-09-20 66 views
0
SELECT * FROM (SELECT * FROM notifications WHERE popped = '0' ORDER BY id DESC) t WHERE t.userTo = '".$myId."' GROUP BY t.noteId, t.dataId, t.type 

上面的代碼在運行在MYSQL5.5.8上的Wamp服務器上運行完美。然後我升級到最新的Wamp v3.0.6,它運行在MYSQL5.7.14上,我開始發現#1055錯誤。MySql在升級WAMP服務器後拋出錯誤

所以最後,我想出了下面SQL Query

這段代碼的圖像,但我得到這個錯誤Error thrown back

我已經完全嘗試了所有我可以,但不能修復這個錯誤。有人能幫我解決這個問題嗎?

,我真的需要子查詢

+0

你用來執行查詢的PHP版本和PHP代碼是什麼? – AbraCadaver

+0

這是PHP5.6.25。 –

+0

沒有發佈這個答案,因爲這是一個解決方法,而不是解決方案。我的默認解決方案是更新我的MySQL配置,以將'sql_mode'設置爲不包含'only_full_group_by'的。不過,我有興趣瞭解適當的解決方案。 – rickdenhaan

回答

0

這裏有一個解決方法,以使MySQL 5.7的行爲就像以前的版本GROUP BY查詢 - 這不應該被接受的答案

首先,找出你目前sql_mode

SELECT @@sql_mode; 

在我的測試服務器,返回:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 

您看到的錯誤是由ONLY_FULL_GROUP_BY標誌引起的。您可以更新您的MySQL配置文件以刪除該標誌。查找並編輯您的my.cnf文件(IIRC,您可以從任務欄圖標中的WAMP菜單訪問它,但是自從我上次使用WAMP以來可能已經改變了幾年)。

檢查在那裏是否已經定義了sql_mode。如果沒有,請將其添加到[mysqld]標題下的某處。使其值與您從前面的查詢中獲得的sql_mode相同,減去ONLY_FULL_GROUP_BY的標誌。所以在我的情況下,這將是:

[mysqld] 
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

保存文件並重啓MySQL加載的變化。

請注意,在下次更新WAMP時,對my.cnf文件所做的更改很可能會被覆蓋,因此這不是永久性解決方案。對於永久修復,您應該更新您的查詢以與默認sql_mode兼容。