在JOIN之后获取字段中的数组

时间:2012-08-08 07:08:38

标签: sql codeigniter

假设我有一个名为Appointments的表,另一个名为Clients的表和一个名为ClientsAppointments的连接表,它与前面提到的两个相关联。这用于客户可以有多个约会的场景,并且多个客户可以参加同一个约会(n-n关系)。

我想列出约会,其中“客户”字段是与该约会相关的所有客户的数组。到目前为止我尝试过的:

    SELECT * FROM Appointments a
    INNER JOIN ClientsAppointments ca ON ca.IdAppointment = a.IdAppointment
    INNER JOIN Clients c ON c.IdClient = ca.IdClient

当然,这不起作用。它给了我一个与他们拥有的每个客户重复的约会列表。然后在PHP中我会处理它们来实现这一点。这种方式似乎更有效,而不是进行多次查询,因为每次约会通常只有一个客户端。

表模式(这些不是实际的表,但是为了说明这种情况而简化):

    Appointment(
            INT idAppointment,
            DATETIME start,
            DATETIME end)

    Clients(
            INT idClient,
            VARCHAR name)

    ClientsAppointments(
            INT idAppointment,
            INT idClient)

2 个答案:

答案 0 :(得分:0)

尝试使用LEFT OUTER JOIN

SELECT a.*,c.Name FROM ClientsAppointments ca
LEFT OUTER JOIN Appointments a ON ca.IdAppointment = a.IdAppointment
LEFT OUTER JOIN Clients c ON ca.IdClient = c.IdClient

答案 1 :(得分:0)

如果您使用MySQL作为数据库,请尝试使用GROUP_CONCAT:

SELECT a.IdAppointment,GROUP_CONCAT(CAST(ca.IdClient AS CHAR) SEPARATOR ',')  FROM Appointments a
INNER JOIN ClientsAppointments ca ON ca.IdAppointment = a.IdAppointment
group by a.IdAppointment