添加到LEFT JOIN查询

时间:2012-05-08 21:01:42

标签: mysql

您好我需要帮助添加一个新的CLAUSE,这个对我来说非常先进,我无法理解。 //使用ect.author_id查询exp_channel_titles表author_id列并扫描这些行以获得最终结果。由IF ect.status ='Members-id5'和ect.status ='complete'确定...然后使用Members-id5的行作为ect.entry_id。我的问题是我该怎么做?我标记了我认为新CLAUSE或者甚至可能查询的地方,但我可能是错的。

我的问题是最多有5个不同的ect.entry_id所以我试图用status = Members_id5来隔离行中的那个,但只有在status = complete的情况下才存在。这似乎是我需要在PHP中使用数组的任何想法吗?

    SELECT
             ect.entry_id
        ,    ect.author_id
        ,    ect.title
        ,    ect.status
        ,    ecd.field_id_13
        ,    ecd.field_id_14
        ,    ecd.field_id_15
        ,    ecd.field_id_25
        ,    ecd.field_id_27
        ,    ecd.field_id_28
        ,    ecd.field_id_29
        ,    ecd.field_id_30
        ,    ecd.field_id_31
        ,    ecd.field_id_32
        ,    ecd.field_id_33
        ,    ecd.field_id_34
        ,    ecd.field_id_35
        ,    exm.email
    FROM exp_channel_titles as ect
    LEFT JOIN exp_channel_data as ecd
      ON ecd.entry_id = ect.entry_id
    LEFT JOIN exp_members as exm
      ON exm.member_id = ect.author_id

// new CLAUSE

    WHERE ect.title LIKE '%Member%'
    AND ect.status = 'Members-id5'

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您只想返回exp_channel_titles条记录,其中status =“Members-id5”,但对于其author_id,存在另一条状态为“完成”的记录。

如果我有这个权利,我相信你只需再次加入(INNER JOIN,而不是LEFT(外部)JOIN):

JOIN exp_channel_titles as ect_status ON ect.author_id = ect_status.author_id AND ect.status = 'complete'

添加到现有查询中的该子句应仅返回状态为“Members-id5”但具有状态为“完成”的匹配记录的exp_channel_titles条记录。

答案 1 :(得分:1)

根据您的评论,听起来您想找到一个记录,其中ect.status =“Members-id5”,另一个记录ect.status =“complete”。然后,您希望SELECT查询仅适用于这些个人。您可以使用WHERE子句中的两个子查询来执行此操作。像这样:

WHERE ect.title LIKE '%Member%'
AND ect.author_id IN 
     (select author_id from exp_channel_titles where ect.status = "Members-id5")
AND ect.author_id IN
     (select author_id from exp_channel_titles where ect.status = "complete")

第一个子查询生成所有作者ID的列表,其中至少有一个记录中包含“Members-id5”的记录,IN子句检查当前正在考虑的作者ID是否是其中之一。第二个与具有“完整”记录的所有作者ID的列表相同。如果两个条件都为真,则表示个人是您想要返回的记录。

我不熟悉您的数据结构,因此这可能不是您需要的确切代码(特别是,ect.author_id实际上可能不是要比较的字段),但希望这能为您提供这个想法。