1

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

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

收件箱表有常规字段,如主题、邮件正文、日期、时间等。它还包含一个标志(sender_type),可以是“ C ”、“ L ”、“ A ”和(sender_id)

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

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

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

我为LAC类型的用户从 3 个不同的表 myl_u、mya_u 和 myc_c 中获取ext 。

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_ida_idc_id

4

1 回答 1

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
于 2013-05-14T08:33:49.750 回答