mysql IF由另一个字段限定


mysql IF conditioned by another field

我有以下简单的Inbox模拟查询(用于邮件目的)

SELECT * FROM inbox 
WHERE receiver_id=:receiver_id 
AND receiver_type='a' 
AND spam!='y' 
ORDER by date DESC, time DESC 
LIMIT :paging OFFSET :offset

收件箱表有常规字段,如主题,mail_body,日期,时间等。它还包含一个标记(sender_type)可以" C "、" L "、""和(sender_id)

我想包含一个额外的字段在(SELECT *)的末尾,命名为ext,其中包含该特定类型用户的图像扩展名(因此我可以显示图像-图像格式为id, ext意味着$id。$ext - 1.jpg, 2.png等....

我认为做1个查询比我现在做的要好,这是上面的主要查询,然后,对于每个条目,我扫描特定表中的C, L和A类型用户,并请求相应的ext为他们的特定id (sender_id),以便我可以显示他们的照片。

在上面的SELECT中添加每种类型用户的图像的ext扩展名是否有用(也是可能的)?我假设它是用IF语句完成的,但我真的不知道怎么做。这可不是件简单的事。

我从3个不同的表myl_u, mya_u和myc_c中抓取ext,用于LAC类型的用户。

L

* C 表查询像

SELECT l_id, ext, name, .. FROM myl_u
SELECT a_id, ext, name, .. FROM myl_a
SELECT c_id, ext, name, .. FROM myc_c
在收件箱表

, sender_id l_id , a_id c_id

您可以连接发件人ID上的所有表,然后使用IFNULL方法只抓取正确的ext。

SELECT *
       , IFNULL(TL.ext, IFNULL(TA.ext, TC.ext)) as ext
       , IFNULL(TL.name, IFNULL(TA.name, TC.name)) as name
FROM inbox AS T1
LEFT JOIN myl_u AS TL ON T1.sender_id=TL.l_id AND T1.sender_type='L'
LEFT JOIN mya_u AS TA ON T1.sender_id=TA.a_id AND T1.sender_type='A'
LEFT JOIN myc_c AS TC ON T1.sender_id=TC.c_id AND T1.sender_type='C'
WHERE receiver_id=:receiver_id 
AND receiver_type='a' 
AND spam!='y' 
ORDER by date DESC, time DESC 
LIMIT :paging OFFSET :offset