ホームページ >データベース >mysql チュートリアル >MySQL で WHERE 句を特定のフィールドに制限できますか?

MySQL で WHERE 句を特定のフィールドに制限できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-05 18:17:021010ブラウズ

Can I Restrict WHERE Clauses to Specific Fields in MySQL?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。