我在这个问题上有三个要素。一个是这种格式的id数组:(1,3,5,6,8)。该数组是我想要显示的用户ID的列表。第二个元素是包含用户信息的表格,如: id name surname email 。第三个元素是包含用户配置的第二个表。最后一个表中有两个参数,一个是 lid ,另一个是 usraction (其中一些,但重要的是那两个)。 lid表示权限类型并使用值,如果用户希望他的数据公开,那个表上会有一行 lid = 3 和 usraction =“accepted”,我每次用户更改此权限时都会注册操作的日期时间,因此每次更改时都会添加一个新行,并且为了检索权限的实际状态,我必须检索最后一行。用户检查像这样的usraction值:
SELECT * FROM legallog WHERE uid = '.$user['id'].' AND lid = 3 ORDER BY ABS(`registration` - NOW()) LIMIT 1
然后在php:
if($queryresult && $queryresult[0]['usraction']=='accepted') //display data
在方案id中描述了如何获取当时由一个用户设置的权限的实际状态,现在问题是我想在一个或两个sql调用中清理一组id。假设我想要打印4个用户的用户信息,一个函数以这种格式给出了ID:(2,6,8,1),但这些用户可能不想显示他们的信息,使用我之前显示的查询我可以为每个用户调用sql server,然后生成一个新数组,如果授权的用户是1和8,结果数组将是(8,1)。
思考是100个用户的数组,我将拨打100个电话,我不想要这个,有没有办法在一两个查询中解决这个问题?
答案 0 :(得分:1)
这样的查询可以获得您想要的信息:
select u.*,
(select usraction from configuration c where c.userid = u.userid and c.lid = 3 order by datetime limit 1
) as lastLid3Action
from users u
where u.userid in (1,3,5,6,8)
如果您只想要“接受”值,请将其设为子查询:
select t.*
from (select u.*,
(select usraction from configuration c where c.userid = u.userid and c.lid = 3 order by datetime limit 1
) as lastLid3Action
from users u
where u.userid in (1,3,5,6,8)
) t
where LastLid3Action = 'Accepted'
答案 1 :(得分:0)
据我所知,您在第一个表中有两个表,其中存储了用户信息;和第二个表,存储用户权限。并且您希望使用第二个表的权限从第一个表中获取信息,然后您需要此查询:
SELECT a.*
FROM first-table-name AS a
RIGHT JOIN second-table-name AS b a.uid = b.lid
WHERE uid in (1,3,5,6,8) AND usraction='accepted'
ORDER BY ABS)
LIMIT 1
答案 2 :(得分:-1)
你的问题有些模糊,但是如果你在询问如何在有一个id列表时选择一些记录,答案是:
select column, list, goes, here from tablename
where id in (1,5,8,12,413);
这将为您列出仅列出与您的数组ID匹配的记录的列的值。