ユーザーを定義するための3つのテーブルがあります。
USER: user_id (int), username (varchar)
USER_METADATA_FIELD: user_metadata_field_id (int), field_name (varchar)
USER_METADATA: user_metadata_field_id (int), user_id (int), field_value (varchar)
アプリケーション内の他のユーザーに特定のアクセス権を持つ中間層ユーザーを作成したいと思います。ログインしたユーザーがアクセスできるユーザーを判別するために、次のようなサブクエリを使用しています。
SELECT user_id FROM user WHERE user_id
IN (SELECT user_id
FROM user_metadata
WHERE user_metadata_field_id = 1 AND field_value = 'foo')
現在、サブクエリ文字列を変数に格納し、ユーザーのリストを取得する必要があるたびに、それを外部クエリに動的に挿入しています。これを行った後、「実際のsの文字列を格納する方がよい」と思いましたuser_id
。
したがって、これを変数に格納する代わりに...
$subSql = "SELECT user_id FROM user_metadata WHERE user_metadata_field_id = 1 AND field_value = 'foo'";
...実際にクエリを実行して結果を次のように保存します...
$subSql = "12, 56, 89, 100, 1234, 890";
次に、ログインしているユーザーがアクセスできるユーザーを取得する必要がある場合は、次の方法で実行できます。
$sql = "SELECT user_id FROM user WHERE user_id IN ($subSql)";
そして最後に質問:
MySQL IN
CLAUSEではいくつのアイテムを使用できますか?サブSQLステートメントの代わりに実際のIDを保存することは、毎回その外部クエリを実行するために高速である必要がありますよね?