Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 简化mysql查询 脚本_Php_Mysql_Sql - Fatal编程技术网

Php 简化mysql查询 脚本

Php 简化mysql查询 脚本,php,mysql,sql,Php,Mysql,Sql,这个问题有三个要素。一个是这种格式的ID数组:1,3,5,6,8。该数组是我要显示的用户id的列表。第二个元素是包含用户信息的表,如:id名称姓氏电子邮件。第三个元素是包含用户配置的第二个表。最后一个表中有两个参数,一个是lid,另一个是usraction,但重要的是这两个参数。lid表示权限类型和usraction值,如果用户希望其数据公开,则该表中将有一行lid=3和usraction=accepted,并且每次用户更改此权限时,我都会注册操作的日期时间,因此每次用户更改此权限时,都会添加一

这个问题有三个要素。一个是这种格式的ID数组:1,3,5,6,8。该数组是我要显示的用户id的列表。第二个元素是包含用户信息的表,如:id名称姓氏电子邮件。第三个元素是包含用户配置的第二个表。最后一个表中有两个参数,一个是lid,另一个是usraction,但重要的是这两个参数。lid表示权限类型和usraction值,如果用户希望其数据公开,则该表中将有一行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个电话,我不想这样,有没有办法在一两个查询中解决这个问题?

你的问题有些模糊,但是如果你问当你有一个ID列表时如何选择一些记录,答案是:

select column, list, goes, here from tablename
where id in (1,5,8,12,413);

这将为您列出的列的值获取与您的ID数组匹配的记录。

这样的查询将为您获取所需的信息:

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'

据我所知,第一个表中有两个表,其中存储了用户信息;以及存储用户权限的第二个表。如果要使用第二个表的权限从第一个表获取信息,则需要此查询:

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

因此uid不是“重要的”之一?uid是用户ID,但对于所有用户,无论他们是否允许共享他们的数据,在我有限的经验中,与MySQL相关的最成功的问题是采用以下格式的问题:给定这样的数据集,我如何获得这样的结果集。您将注意到,缺少行x、y和z是因为da-di-da,而存在行a、b和c是因为dum-di-dum。使用一个好的SQLFIDLE也不会有什么坏处。我发现了这个错误:每个派生表都必须有自己的别名,使用这个查询:select u.*中的select t.*,从Legalloc中选择usraction,其中c.uid=u.id,c.lid=3按注册限制1排序,作为用户u的lastLid3Action,其中u.id在10,22,23,25,44,46,48,7 t中,其中lastLid3Action=Accepted@DomingoSL . . . 我想你在10,22,23,25,44,46,48,7吨有一个额外的收盘价。我认为应该是10,22,23,25,44,46,48,7 tDid,并对数据排序方式进行修改!谢谢