mysql IF受另一个字段的限制

时间:2013-05-14 08:25:34

标签: php mysql

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

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

收件箱表包含常规字段,例如subject,mail_body,日期,时间等。 它还包含一个标志(sender_type),可以是“ C ”,“ L ”,“ A ”和(sender_id)

我想在名为 ext 的(SELECT *)末尾添加额外字段,其中包含该特定类型用户的图片扩展名(所以我可以显示图像 - 图像格式为 id,ext 表示$ id。$ ext - 1.jpg,2.png等......

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

在上面的SELECT中添加每种类型用户的图像的 ext 扩展是否有用(也可能)?我认为它是用IF语句完成的,但实际上并不知道如何。这不是一件简单的事。

我从3个不同的表格myl_u,mya_u和myc_c中抓取分机 L A C 类型用户。

L * A *和 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

在INBOX表格中, sender_id 对应 l_id a_id c_id

1 个答案:

答案 0 :(得分:2)

您可以加入发件人ID上的所有表格,然后使用IFNULL方法只获取正确的分机号。

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