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