我正在 PHP 中构建一个 RSS 提要,它使用来自三个单独表的数据。这些表格均涉及网站不同区域内的页面。我遇到的问题是尝试在 XML 中创建链接字段。如果不知道每条记录来自哪个表,我无法创建指向它的正确链接。
有办法解决这个问题吗?我尝试使用 mysql_fetch_field,但它返回表的空白值。
SELECT Title FROM table1
UNION
SELECT Title FROM table2
UNION
SELECT Title FROM table3
还涉及其他字段,但这基本上是我正在使用的查询。
只需将常量添加到列列表中,如下所示:
select 'table1' as table_name, title from table1
union all
select 'table2' as table_name, title from table2
union all
select 'table3' as table_name, title from table3
这会给你一些类似的东西:
table_name | title
-----------+-----------------------------
table1 | war and peace
table2 | 1984
table3 | terminator salvation
等等。
这允许您拥有字符串数据类型,这可能会使您更轻松地转换为链接(特别是如果您使用只需复制到页面而不是查找或转换的值)并且使用
as
子句将允许您可以像任何其他列一样引用它(按名称)。
注意
union all
的使用 - 如果您确定表中不会有重复的行(在这种情况下,这可能是正确的,因为每个行都有不同的 table_name
值,我假设标题是唯一的),union all
可以避免浪费的排序和删除重复操作。单独使用 union
可能会导致完成不必要的工作。如果您想删除重复项,只需恢复使用
union
即可。
SELECT Title, 1 FROM table1
UNION ALL
SELECT Title, 2 FROM table2
UNION ALL
SELECT Title, 3 FROM table3
SELECT t1.*,t1.table_name
FROM
t1
UNION ALL
SELECT t2.*,t2.table_name
FROM
t2
LEFT OUTER JOIN
t1
ON t1.id=t2.id
WHERE t1.id=null
上面的脚本不会给出重复的数据行并确保
t1和t2之间的所有公共数据作为源t1表。