最佳答案
我有三个表来定义用户:
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')
目前,我将子查询字符串存储在一个变量中,然后在每次需要拉出用户列表时将其动态插入到外部查询中。这样做之后,我想,“只存储一个实际的 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)";
最后的问题是:
您可以在 MySQLIN
子句中使用多少项?为了每次执行外部查询,存储实际 id 而不是 subsql 语句必须更快,对吗?