您好我需要帮助添加一个新的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'
答案 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实际上可能不是要比较的字段),但希望这能为您提供这个想法。