Mysql 来自具有不同关系的两个连接

Mysql 来自具有不同关系的两个连接,mysql,Mysql,在我的php页面上,我想显示一个表,其中包含:航次名称、开始日期、行驶的总距离、船名、船长、船员 +----------------------+ | Tables_in_boatinglog | +----------------------+ | boat | | crew | | vday | | voyage | | voyage_crew | +

在我的php页面上,我想显示一个表,其中包含:航次名称、开始日期、行驶的总距离、船名、船长、船员

+----------------------+
| Tables_in_boatinglog |
+----------------------+
| boat                 |
| crew                 |
| vday                 |
| voyage               |
| voyage_crew          |
+----------------------+
我已经做到了这一点:

SELECT
    v.*,
    MIN(DATE_FORMAT(d.vdaydate, '%M %e, %Y')) AS vdaydate,
    SUM(d.vdaydistance) AS vdaydistance,
    boat.boatname
FROM
    voyage v
        JOIN
    vday d ON d.idvoyage = v.idvoyage
    INNER JOIN boat ON v.idboat = boat.idboat
GROUP BY v.idvoyage , v.voyagename
…将从vday表中给我一个带有开始日期的航行列表

SELECT v.*, c.crewname, vc.captain
FROM voyage v
     INNER JOIN
    voyage_crew vc ON vc.idvoyage = v.idvoyage
        INNER JOIN
    crew c ON vc.idcrew = c.idcrew
…会给我一份带“y”的船员名单给船长

但我不知道如何将这两者结合起来。我应该试着在MySQL语句中这样做吗?还是PHP中的某种循环

VOYAGE
idvoyage | PRI 
voyagename
voyagearea
idboat 

VDAY
idvday | PRI
vdaydate
vdaynotes
vdaydistance
vdaystartlocation
vdayfinishlocation
idvoyage

BOAT
idboat | PRI
boatname
boattype
boatlength
boatmodel
boatyear
boatcharterco

CREW
idcrew | PRI
crewname
crewcert

VOYAGE_CREW
idvoyage | PRI 
idcrew | PRI
captain | varchar(2) 

您的SQL有点混乱,但这可能会起作用,或者类似的方法也会起作用。基本上,您需要使用
idvoyage

SELECT * FROM (
    SELECT
        v.*,
        MIN(DATE_FORMAT(d.vdaydate, '%M %e, %Y')) AS vdaydate,
        SUM(d.vdaydistance) AS vdaydistance,
        boat.boatname
    FROM
        voyage v
            JOIN
        vday d ON d.idvoyage = v.idvoyage
        INNER JOIN boat ON v.idboat = boat.idboat
    GROUP BY v.idvoyage , v.voyagename
)
AS a # this table name can be anything
LEFT JOIN (
    SELECT v.*, c.crewname, vc.captain
    FROM voyage v
         INNER JOIN
        voyage_crew vc ON vc.idvoyage = v.idvoyage
            INNER JOIN
        crew c ON vc.idcrew = c.idcrew
)
AS b # this table name can be anything
USING (idvoyage)
# alternately, instead of the above line with "USING", you could try:
# ON (a.idvoyage = b.idvoyage)

这里的主要思想是让两个查询保持原样,只需在每个查询周围添加一个大连接。

欢迎使用Stack Overflow!请用相关的、最少的示例数据来构建SQL问题,以展示您的需求和相应的预期输出。请阅读此链接:谢谢。这让我走了一半路。我现在意识到实际的问题是如何获取:yoyage姓名、船长、1号机组、2号机组等。因此我想到我必须从机组数据库中获取它,并尝试以某种方式获取vday信息。啊,
选择v.idvoyage,GROUP_CONCAT(不同的c.crewname分隔符),”
可以获取我需要的信息。