MySQL 中 WHERE 子句可以限制為特定欄位嗎?
MySQL 中,WHERE 子句依照指定條件過濾行。但是,不可能將 WHERE 子句的應用限製到查詢中的特定欄位。
理解問題
在問題的上下文中,目標是顯示可用課程的清單以及關聯用戶的註冊狀態。每行代表一門課程並顯示特定使用者的註冊狀態 (userHabilitado)。但是,必須從 URL 中取得使用者的 userID,並用於過濾該特定使用者的結果。
解決方案:利用非完整分組依據
之前MySQL 5.7 開始,MySQL 允許非完整分組依據,這意味著像group_concat 這樣的聚合函數可以與非聚合列(NON AGGS)一起使用。但是,從 MySQL 5.7 開始,預設啟用 ONLY_FULL_GROUP_BY 設定,不允許此類查詢。
在這種情況下,查詢嘗試將 userHabilitado 新增至正在顯示的列清單中,這些列已按 Cursos 分組.cursoID。但是,顯示的 userHabilitado 值不會被 WHERE 子句過濾,因此顯示為該使用者找到的第一個值,無論課程為何。
解決方法:禁用非完整分組依據
一種解決方法是使用SQL_CALC_FOUND_ROWS 修飾符禁用特定查詢的ONLY_FULL_GROUP_BY:
<code class="sql">SET SQL_CALC_FOUND_ROWS = 0;</code>
但是,不建議這樣做,因為它可能會導致結果中潛在的差異,並且應該與小心。
以上是我可以將 WHERE 子句限制為 MySQL 中的特定欄位嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!