mysql接收并比较来自多个表的数据

时间:2013-12-18 17:57:56

标签: php

debat和comments的数据库表是相同的。似乎$ title和$ date不起作用。如何从两者获取信息,并按日期排序?

<?php
$showwall = mysql_query("(SELECT * FROM debat WHERE user='$user') UNION (SELECT * FROM comments WHERE user='$user') ORDER BY date LIMIT 0, 25");
$results = array();
while($wall = mysql_fetch_array($showwall, MYSQL_ASSOC)){ // Line 21
$results[] = $wall;

<li class="comment">
<div class="comment">
    <div class="comment-author vcard user frame">
<?php echo "<a href=view.php?action=view&ID=".$wall['ID']."><img src=images/avatar/".$select['avatar']." class=avatar avatar-70 photo height=70 width=70 /></a>"; ?>
    </div>
    <div class="message">
    <span class="reply-link"><?php echo "<a href=view.php?action=edit&ID=".$wall['ID'].">"; ?> Edit </a></span>

<div class="info"> 
<h2><?php echo $wall['title']; ?></h2>
<span class="meta">
<?php 
$date->setTimestamp($wall['date']);
echo "Dato: ";
echo $date->format('d-m-Y') . "\n";
echo "Kl: ";
echo $date->format('H:i:s') . "\n";
?>
</span>
</div>
        <div class="comment-body ">
        <p><?php echo $wall['comment']; ?></p>
        </div>
    </div>
</div>
</li>

<?php } ?>

我想添加另一个数据库来加载,似乎留下了空白的结果。

$showwall = @mysql_query("(SELECT * FROM debat WHERE user='$user') UNION (SELECT * FROM comments WHERE user='$user') UNION (SELECT * FROM nyheder WHERE user='$user') ORDER BY date LIMIT 0, 25");

数据库包含具有相同名称的表,但有些表包含的字段多于其他字段。所以这不是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

$showwall = @mysql_query("(SELECT * FROM debat WHERE user='$user') UNION (SELECT * FROM comments WHERE user='$user') UNION (SELECT * FROM nyheder WHERE user='$user') ORDER BY date LIMIT 0, 25")

如评论中所述,@将禁止错误消息;那些是有原因的。您也没有检查结果 - 添加or die (mysql_error())会从数据库中提供错误消息。

在这种情况下,问题是因为您正在使用UNION。这只有在所有表都具有相同顺序的列时才有效,我怀疑情况并非如此。我想你只需要一个简单的JOIN:

SELECT * FROM debat d 
    INNER JOIN comments c ON d.user=c.user 
    INNER JOIN nyheder n ON d.user=n.user
WHERE d.user='$user'

最后一点 - 你正在使用mysql_ *函数,这些函数正在从PHP中删除。您应该考虑转移到mysqli_ *或PDO - 它们都使您更容易编写更安全的代码。