MySQL では WHERE 句を特定のフィールドに制限できますか?
MySQL では、WHERE 句は指定された条件に基づいて行をフィルタリングします。ただし、WHERE 句の適用をクエリ内の特定のフィールドに制限することはできません。
問題の理解
質問のコンテキストでは、目的は、利用可能なコースのリストと、関連するユーザーの登録ステータスを表示することです。各行はコースを表し、特定のユーザーの登録ステータス (userHabilitado) を示します。ただし、ユーザーの userID を URL から取得し、その特定のユーザーの結果をフィルタリングするために使用する必要があります。
解決策:
前に非フル グループを悪用するMySQL 5.7 では、MySQL は非完全なグループ化を許可しました。これは、group_concat のような集計関数を非集計カラム (NON AGGS) で使用できることを意味しました。ただし、MySQL 5.7 以降では、ONLY_FULL_GROUP_BY 設定がデフォルトで有効になっており、そのようなクエリは許可されません。
この場合、クエリは表示されている列のリストに userHabilitado を追加しようとしますが、これらの列はすでに cursos によってグループ化されています。 .cursoID。ただし、表示されている userHabilitado 値は WHERE 句でフィルタリングされていないため、コースに関係なく、そのユーザーで最初に見つかった値が表示されます。
回避策: 非完全グループの無効化
回避策の 1 つは、SQL_CALC_FOUND_ROWS 修飾子を使用して特定のクエリの ONLY_FULL_GROUP_BY を無効にすることです。
<code class="sql">SET SQL_CALC_FOUND_ROWS = 0;</code>
ただし、これは結果に矛盾が生じる可能性があるため推奨されません。注意してください。
以上がMySQL で WHERE 句を特定のフィールドに制限できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。