考虑以下三个表:
t1(id,name,cDate,foo,…)
t2(id,name,cDate,bar,…)
t3(id,name,cDate,other,…)
这些表代表一些独立的实体.我需要在站点主页上显示它们,无论它们在按创建日期排序的列表中的类型(cDate).
rows
---
t1
t2
t2
t3
t2
t1
目前我已经通过联合创建了一个视图(或子查询)的一些共享列和一个用于表名的辅助列:v1(id,cDate,tableName)来选择它们按cDAte排序.之后,我在每个表上查询以获取表的行,并将结果合并到PHP数组中并将它们发送回查看.但是我认为它不那么高效和干净.有没有更好的方法?
解决方法:
作为@John Green答案的改进,我使用COALESCE函数创建了一个SQL fiddle,它返回第一个非null参数:
SELECT COALESCE(t1.id, t2.id, t3.id) id
, COALESCE(t1.name, t2.name, t3.name) name
, COALESCE(t1.cDate, t2.cDate, t3.cDate) cDate
, COALESCE(t1.foo, t2.bar, t3.other) uniqueField
FROM (
SELECT 't1' AS source, id FROM t1
UNION
SELECT 't2' AS source, id FROM t2
UNION
SELECT 't3' AS source, id FROM t3
) ad
LEFT JOIN t1 ON ad.id = t1.id AND ad.source = 't1'
LEFT JOIN t2 ON ad.id = t2.id AND ad.source = 't2'
LEFT JOIN t3 ON ad.id = t3.id AND ad.source = 't3'
ORDER BY cDate
使用此方法的优点是,您可以按照业务规则所需的方式组合所有表中不常见的字段,如uniqueField中所示
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。