Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
Mysql 组合来自不同表的数据_Mysql - Fatal编程技术网

Mysql 组合来自不同表的数据

Mysql 组合来自不同表的数据,mysql,Mysql,我想我现在有点昏厥 我有几个MySQL表,如下所示: SELECT b.*, u.username FROM bookings b LEFT JOIN users u ON b.user1 = u.id OR b.user2 = u.id 预订: id-int 开始时间-日期时间 endtime-日期时间 user1-int user2-int +--+--------------------+-------------------+-----+-----+ |id| startti

我想我现在有点昏厥

我有几个MySQL表,如下所示:

SELECT b.*, u.username
FROM bookings b
LEFT JOIN users u
ON b.user1 = u.id
  OR b.user2 = u.id
预订:

id-int 开始时间-日期时间 endtime-日期时间 user1-int user2-int

+--+--------------------+-------------------+-----+-----+
|id|    starttime       |      endtime      |user1|user2|
+--+--------------------+-------------------+-----+-----+
|1 |2017-03-17 15:00:00 |2017-03-17 16:00:00|  1  |  3  |
+--+--------------------+-------------------+-----+-----+
表格用户: id-int 用户名-varchar

+--+--------+
|id|username|
+--+--------+
|1 |Rainer  |
|2 |Horst   |
+-----------+
现在我想做一个查询,在一行中获取开始时间、结束时间和用户名称

有人能帮忙吗

提前谢谢

问候
Gardinero

试试这样:

SELECT b.*, u.username
FROM bookings b
LEFT JOIN users u
ON b.user1 = u.id
  OR b.user2 = u.id
如果要了解有关联接的更多信息,请创建从一个表到另一个表的联接:


我还没有测试这段代码,所以当复制粘贴失败时,您可能需要调试它。

这个简单的查询应该可以做到:

SELECT bookings.starttime, bookings.endtime, users.username FROM
bookings
INNER JOIN users
ON bookings.user1 = users.id OR bookings.usert = users.id

我测试了这个查询,效果很好。

问题是,如果我使用前面两个答案中的连接,我会得到两个结果

2017-03-17 15:00:00 - 2017-03-17 16:00:00 - Rainer
2017-03-17 15:00:00 - 2017-03-17 16:00:00 - Horst
但我只希望收到一个包含两个用户名的结果,如:

2017-03-17 15:00:00 - 2017-03-17 16:00:00 - Rainer - Horst

您需要两次加入同一个表

SELECT b.*,u1.*, u2.*
FROM bookings b
LEFT JOIN users u1
ON b.user1 = u1.id
join users u2 b.user2 = u2.id

尝试此操作,但需要两个用户都出现在表中

您需要为每列创建一个联接。试试这个:

SELECT b.*, u1.username username1, u2.username username2
FROM bookings b
LEFT JOIN users u1 ON b.user1 = u1.id
LEFT JOIN users u2 ON b.user2 = u2.id

非常感谢,但如果我这样做,我会得到两个结果,一个是第一个用户名,一个是另一个。我想用两个名字得到一个结果,比如:2017-03-17 15:00:00-2017-03-17 16:00:00-Rainer-Horstry使用类似于group concat的东西。你为什么要它这样显示?也许你应该重新考虑一下你的桌子结构。在我看来,现在你的名字和姓氏似乎有了不同的记录。关于group concat的更多信息:完美,这就是我的案例的解决方案。谢谢大家的帮助!