我有三个表来定义用户:
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_ids 的字符串”。
因此,与其将其存储在变量中...
$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 INCLAUSE中可以使用多少个项目?每次执行该外部查询时,必须存储实际的id而不是sub-sql语句,对吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从一定数量开始,IN表速度更快。
MySQL 在其代码内部包含一些内容,这使得在大量常量值上构建范围比在嵌套循环中进行计算要慢。来源:stack overflow