Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 如何使用SQL在一行上获取3个用户?(MySQL)_Php_Mysql_Sql - Fatal编程技术网

Php 如何使用SQL在一行上获取3个用户?(MySQL)

Php 如何使用SQL在一行上获取3个用户?(MySQL),php,mysql,sql,Php,Mysql,Sql,我有两个这样的数组 第一个表(信息): 第二个表格(用户): 我想从第一个表的IDs中获取一行用户的信息 我尝试从第一个表中获取行并获取用户,但我只想通过一个查询优化函数 SELECT * FROM infos; SELECT * FROM Infos i,Users u WHERE u.ID = u.User1 (or 2 ...) 有什么解决方案吗?您可以使用加入表用户3次,每个用户ID一次,显示相关名称(或其他变量) 正如建议您不要使用基于逗号分隔表名和where子句的旧隐式join

我有两个这样的数组

第一个表(信息):

第二个表格(用户):

我想从第一个表的
IDs
中获取一行用户的信息

我尝试从第一个表中获取行并获取用户,但我只想通过一个查询优化函数

SELECT * FROM infos;

SELECT * FROM Infos i,Users u WHERE u.ID = u.User1 (or 2 ...)

有什么解决方案吗?

您可以使用加入表用户3次,每个用户ID一次,显示相关名称(或其他变量)


正如建议您不要使用基于逗号分隔表名和where子句的旧隐式join sintax,您应该使用(自1992年起)explict join。。此sintax执行相同的结果,但更为明确

这是一个设计错误。使用N:N关系(附加表)允许第一个表有任意数量的用户。有了这个关系,其他查询就更容易了

关系表如下所示:

create table relation
(
  table1_id int unsigned not NULL,
  table2_id int unsigned not NULL,
  primary key(table1_id,table2_id)
);
一个典型的查询(我通常不喜欢
A.*
):


加入不是有点重吗?@arc你什么意思。。???如果您不加入一个表,您如何考虑从一个相关的表中检索值。。无论如何,通过正确的索引可以很容易地解决性能问题。至于性能方面的观点,我只是认为对表进行一次解析也是一个好主意。是的,你是对的,索引也是一个好主意。@arc如何一次解析表。。并检索3个不同r列user1、user2、user3..的名称。。如果你能给我看一下密码我很好奇。。
SELECT * FROM infos;

SELECT * FROM Infos i,Users u WHERE u.ID = u.User1 (or 2 ...)
select a.id
  , a.user1
  , b.Name as user1name
  , a.user2
  , c.name as user2name
  , a.user3
  , d.name as user3name
from infos a 
inner join   Users b on a.user1 = b.id 
inner join   Users c on a.user1 = c.id 
inner join   Users d on a.user1 = d.id 
create table relation
(
  table1_id int unsigned not NULL,
  table2_id int unsigned not NULL,
  primary key(table1_id,table2_id)
);
 select a.*, b.* 
 from table1 a, table2 b, relation r
 where r.table1_id  = a.id
  &&   r.table2_id  = b.id