循环显示结果3次

时间:2013-12-22 00:26:38

标签: php html while-loop

基本上我正在尝试制作一个简单的新闻提要,但我现在卡住了,因为我的while循环显示结果3次,为什么会这样? :/

<?php 
$sql ="SELECT
            *
        FROM
            news,
            admins";
$result = mysql_query($sql);

if(!$result)
{
    echo 'Error while selecting from database. Please contact the administration team';
} else {
    while($row = mysql_fetch_assoc($result))
    {
        echo '
        <div class="content_news">
            <h1>' . $row['news_name'] . '</h1>
            <p style="font-size:12px;">Posted by <b>' . $row['admin_name'] . '</b> on ' . $row['news_date'] . '
            <p>' . $row['news_description'] . '</p>
            <a href="' . $row['news_link'] . '">read more</a>
        </div>
        ';
    }
}

&GT;

如果你想看看我在说什么:http://freewallpaperblog.com/freshrp/

忽略最后2个(那些是静态html而不是php)

5 个答案:

答案 0 :(得分:0)

您要么有3个管理员,要么有3行新闻。您的查询在表之间进行直接乘法运算。尝试“左连接”而不是......

答案 1 :(得分:0)

您的查询从2个表(newsadmins)中选择数据,因此它将第1个表的每一行与第2个表的每一行连接

SELECT * FROM news, admins

我建议您使用以下查询

SELECT news.*, admins.admin_name FROM news
INNER JOIN admins ON news.admin_id = admins.id

其中admin_id是您正确的列名

答案 2 :(得分:0)

SELECT * FROM news
INNER JOIN admins ON admins.id = news.adminid

或者新闻表中的任何管理员。

答案 3 :(得分:0)

尝试以下查询:

 SELECT
                *
            FROM
                news
    Inner join admins on news.admin_id = admins.id

答案 4 :(得分:0)

您的SQL中没有 JOIN 语句,因为其他人已经在您的问题中对其进行了评论。如果你发布你正在抓取的相关字段会有所帮助,但是基于你的$ row键,我最好的猜测是以下应该适合你(但我不能保证它会不知道你的数据库是如何设计的,我只能从变量名推断出来:)

$sql = "SELECT news.name, news.date, news.description, news.link, admins.name"
. "FROM news"
. "INNER JOIN admins"
. "ON news.name=admins.name"
  

参考文献:

     

http://www.w3schools.com/sql/sql_join_inner.asp

     

http://www.w3schools.com/sql/sql_join_left.asp

     

http://dev.mysql.com/doc/refman/5.0/en/join.html