20

我正在用 PHP 构建一个 RSS 提要,它使用来自三个单独表的数据。这些表格都引用了网站不同区域内的页面。我遇到的问题是尝试在 XML 中创建链接字段。在不知道每条记录来自哪个表的情况下,我无法创建指向它的正确链接。

有没有办法解决这个问题?我尝试使用 mysql_fetch_field,但它为表返回了空白值。

SELECT Title FROM table1
UNION 
SELECT Title FROM table2
UNION 
SELECT Title FROM table3

还涉及其他字段,但这基本上是我正在使用的查询。

4

4 回答 4

33

只需在列列表中添加一个常量,如下所示:

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.

于 2009-09-10T12:15:44.553 回答
16

应该很容易,只需执行以下操作:

SELECT Title, 1 FROM table1
UNION ALL
SELECT Title, 2 FROM table2
UNION ALL
SELECT Title, 3 FROM table3
于 2009-09-10T12:09:00.560 回答
1

下面的查询效果更好,并为您提供更好的主意,因为上面的查询不会两次呈现行。

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

上面的脚本不给出重复的数据行并确保

  1. t1 和 t2 之间的所有公共数据作为源 t1 表。
  2. 非 t2 行源为 t1 表。
  3. 非 t1 行源作为 t2 表。

如果您想要来自 t2 表的公共数据,请翻转左连接

于 2018-11-13T18:34:07.437 回答
0

添加一个具有恒定值的虚拟列。例如。“选择 'funky_table' 作为 source_table, title from funky_table” 用于每个子句,但引号中的名称不同。

于 2011-01-11T16:09:23.900 回答