始终进行一次数据库查询的最有效方法是什么,我知道该查询只会偶尔返回结果?

| 我正在尝试找出如何在我的网站上实施一项新功能。我的网站允许人们下载一组成员上传的内容。新功能将允许该组的1个成员成为“超级”用户,无法上传其上载内容。因此,目前我的查询(或多或少)是-
SELECT * FROM uploads WHERE group = $groupid
我在想将成员的“超级”状态存储在“成员”表中,因此在执行查询之前可能会查找此信息以获得超级成员的成员ID。
$all_group_members = SELECT members FROM groups WHERE group_id = $groupid
$super_member = SELECT memberid FROM members WHERE memberid IN ($all_group_members) AND super_status = 1 
然后将查询修改为-
SELECT * FROM uploads WHERE group = $groupid AND uploader ! = $super_member
但是,在组中可能并不总是有超级成员,所以我的问题是是否有更有效的方法来做到这一点,例如将超级成员ID存储在会话cookie中?如何将超级用户ID存储在组表中-仍然涉及执行查询-
SELECT super_user FROM groups WHERE groupid = $group_id 
但是,至少要少一个查询。 难道这没有办法-我知道大约只有5%的时间会有一个超级用户,因此95%的时间将浪费查询。可能会话cookie可以存储group_has_super_user变量。 还有其他方法可以做到吗? 谢谢     
已邀请:
我认为,其他小组成员无法从小组内容中下载任何内容。因此,只需将可下载字段添加到上传文件中,并将其设置为 1,如果一个简单的成员上传了它,或者 0,如果超级会员拥有。 然后,您唯一需要运行的查询是:
SELECT * FROM uploads WHERE group = $groupid AND downloadable != 0
另外,如果成员资格正在更改(例如,其他人获得了超级权限),则应在组中重新计算这些标志。 不要忘记为groupid +可下载(或可下载+ groupid)创建索引(或将主键设置为index)!     
CREATE TABLE uploads (id, user_id, …)
CREATE TABLE groups (id, …)
CREATE TABLE group_users (group_id, user_id, is_super, …)

SELECT  u.*
FROM    group_users gu
JOIN    uploads u
ON      u.user_id = gu.user_id
WHERE   gu.group_id = $group_id
        AND gu.is_super = 0
    

要回复问题请先登录注册