如何将UNION ALL查询的结果显示为链接


How do you display the result from a UNION ALL query as links?

在使用UNION ALL时,将sql查询的结果作为链接进行回显时遇到问题。

表格如下:

表:帖子
id用户名日期注释

表:文件
id用户名日期文件

";文件";行包含上载文件的url。

我有显示结果的代码:

<?php
$sql="SELECT * FROM posts 
UNION ALL 
SELECT * FROM files 
ORDER BY date DESC LIMIT 100";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result)){
?>
<div> <?php echo $rows['comment']; ?> </div>
<div> <a href="<?php echo $rows['file']; ?>"><?php echo $rows['file']; ?></a> </div>
<?php
}
?>

现在,所有内容都按正确的顺序排列,但文件名不会显示为链接,而是纯文本。如果我只对files表运行查询,那么回显链接是没有问题的。

我想最大的问题是:如何将UNIONALL查询的结果显示为链接?

执行UNION查询时,列是组合的,这意味着commentfile列将是相同的,其结果集名称将是comment(第一个select语句)。看见http://dev.mysql.com/doc/refman/5.0/en/union.html

我更倾向于使用两个单独的查询,一个针对posts表,另一个针对files

如果您在posts表中有

1  2012-03-26 "a comment"
2  2012-03-26 "another comment"

和文件表中:

1  2012-03-26 "./myfile/txt"
2  2012-03-26 "./ico.gif"

工会将是:

ID Date       Comment/file
1  2012-03-26 "a comment"
1  2012-03-26 "./myfile/txt"
2  2012-03-26 "another comment"
2  2012-03-26 "./ico.gif"

(订单未得到保证)

所以,如果您尝试为每一行生成一个带有注释的div和一个带有文件作为链接的div,这将不起作用。在您的情况下,它似乎只显示注释div(因为查询结果行名称必须是注释)

然而,如果您想要实现的目标可以使用如上所述的连接来完成。如果一个posts id与具有相同id 的文件行匹配,则可以是这样

SELECT p.comment comment f.file file FROM posts p
INNER JOIN files f ON f.id = p.id

结果将是:

 comment          file
"a comment"       "./myfile/txt"
"another comment" "ico.gif"

问候