我有以下简单的收件箱模拟查询(用于邮件目的)
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
答案 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