亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel:語法錯誤或訪問沖突:1055解決方案

Laravel:語法錯誤或訪問沖突:1055解決方案

PHP
BIG陽 2023-08-06 14:54:21
為什么此查詢會導致 SQLSTATE 錯誤?SQLSTATE[42000]: Syntax error or access violation: 1055 'database.events.date' isn't in GROUP BYselect `events`.`listing_id`, `events`.`date`, `events`.`listing_name`, count(*) as number_sold from `events` where `events`.`date` >= "2020-07-14" group by `events`.`listing_id` order by `events`.`date` asc當我在服務器上手動運行查詢時,該查詢執行時沒有錯誤,并且具有預期結果。語法錯誤具體是什么?為什么?
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

主要取自解決有關 ONLY_FULL_GROUP_BY SQL 模式的查詢失敗。一篇很棒的文章。

解釋

從 MySQL 5.7 開始,他們使語法更加嚴格,以阻止運行語義上不正確的查詢。調用一個特定的新規則ONLY_FULL_GROUP_BY,它可以防止您在使用 GROUP BY 子句時出錯。

一個容易理解的例子是這樣的:

假設我們想從此表中計算網站上最受歡迎的頁面:

+----+--------------------+---------+---------------------+

| id | page_url? ? ? ? ? ?| user_id | ts? ? ? ? ? ? ? ? ? |

+----+--------------------+---------+---------------------+

|? 1 | /index.html? ? ? ? |? ? ? ?1 | 2019-04-17 12:21:32 |

|? 2 | /index.html? ? ? ? |? ? ? ?2 | 2019-04-17 12:21:35 |

|? 3 | /news.php? ? ? ? ? |? ? ? ?1 | 2019-04-17 12:22:11 |

|? 4 | /store_offers.php? |? ? ? ?3 | 2019-04-17 12:22:41 |

|? 5 | /store_offers.html |? ? ? ?2 | 2019-04-17 12:23:04 |

|? 6 | /faq.html? ? ? ? ? |? ? ? ?1 | 2019-04-17 12:23:22 |

|? 7 | /index.html? ? ? ? |? ? ? ?3 | 2019-04-17 12:32:25 |

|? 8 | /news.php? ? ? ? ? |? ? ? ?2 | 2019-04-17 12:32:38 |

+----+--------------------+---------+---------------------+

你可以簡單地寫:


SELECT page_url, user_id, COUNT(*) AS visits?

? ? -> FROM web_log?

? ? -> GROUP BY page_url ORDER BY COUNT(*) DESC;

并得到如下結果:


+-------------------+---------+--------+

| page_url? ? ? ? ? | user_id | visits |

+-------------------+---------+--------+

| /index.html? ? ? ?|? ? ? ?1 |? ? ? 3 |

| /news.php? ? ? ? ?|? ? ? ?1 |? ? ? 2 |

| /store_offers.php |? ? ? ?3 |? ? ? 2 |

| /faq.html? ? ? ? ?|? ? ? ?1 |? ? ? 1 |

+-------------------+---------+--------+

但該列代表什么user_id?如果你仔細想想,它的內容是完全隨機的。


您需要將其包含在 group_by 子句中,或者將其從選擇中排除(或者以其他方式將其包含在聚合函數中,例如count、min、max等)


所以對我來說,我需要在我的選擇中包含其他非聚合列:


select `events`.`listing_id`, `events`.`date`, `events`.`listing_name`, count(*) as number_sold?

from `events`?

where `events`.`date` >= "2020-07-14"

group by `events`.`listing_id`, `events`.`date`, `events`.`listing_name`

order by `events`.`date` asc

在我的情況下,這給出了預期的數據集。


查看完整回答
反對 回復 2023-08-06
  • 1 回答
  • 0 關注
  • 192 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號