使用if语句显示表中的记录

时间:2014-01-13 09:52:46

标签: php mysql sql select if-statement

我正在为我的课程项目创建一个博客。在此之前,我已经询问了限制显示的角色,有人帮助了我。现在我有3种不同类型的帖子;文章,Q& A和视频,但我把它放在同一张桌子上。我希望按类别显示它并且有分页,我已经完成了。在Category.php中我想按类别显示帖子并按日期顺序排序,如果用户点击“阅读更多”链接,它会将它们重定向到包含完整文章的新页面。例如,如果用户点击Q& A的'Read More'链接,它会将它们重定向到qna-single.php,如果用户点击Video的'Read More'链接,它会将它们重定向到video-single.php

现在我正在使用IF语句来获得该结果。这是我的PHP

$id=$_GET['id'];
$query1 = "SELECT articles.*, categories.category_name FROM articles, categories WHERE articles.article_category_id=categories.category_id AND categories.category_id='$id' and articles.article_type_id='1' ORDER BY article_id DESC LIMIT $start, $limit";
$result1 = mysql_query($query1);

$query2 = "SELECT articles.*, categories.category_name FROM articles, categories WHERE articles.article_category_id=categories.category_id AND categories.category_id='$id' AND articles.article_type_id='2' ORDER BY article_id DESC LIMIT $start, $limit";
$result2 = mysql_query($query2);

$query3 = "SELECT articles.*, categories.category_name FROM articles, categories WHERE articles.article_category_id=categories.category_id AND categories.category_id='$id' AND articles.article_type_id='3' ORDER BY article_id DESC LIMIT $start, $limit";
$result3 = mysql_query($query3);

以下是我显示结果的方式

if ($query1) { //display articles
while ($query_row1 = mysql_fetch_assoc($result1))
{
$string1 = strip_tags($query_row1['article_content']);
if (strlen($string1) > 500) {
$stringCut1 = substr($string1, 0, 500);
$string1 = substr($stringCut1, 0, strrpos($stringCut1, ' '))."... <a href='article-single.php?id=".$query_row1['article_id']."' title='view details' class='more'>Read More</a>";
}

echo "<li>
        <div>
            <h4><a href='article-single.php?id=".$query_row1['article_id']."' title='view details'>".$query_row1['article_title']."</a></h4>
            <span>
                Posted in <a href = '#'>".$query_row1['category_name']."</a> by <a href=''>dr.nor</a> on <a href='#'>".$query_row1['article_date']."</a>
            </span>
        </div>
        <p>".$string1."</p>
    </li>";
}
}
if ($query2) { //display q&a
while ($query_row2 = mysql_fetch_assoc($result2))
{
 $string2 = strip_tags($query_row2['article_content']);
if (strlen($string2) > 500) {
$stringCut2 = substr($string2, 0, 500);
$string2 = substr($stringCut2, 0, strrpos($stringCut2, ' '))."... <a href='qna-single.php?id=".$query_row2['article_id']."' title='view details' class='more'>Read More</a>";
}

echo "<li>
        <div>
            <h4><a href='qna-single.php?id=".$query_row2['article_id']."' title='view details'>".$query_row2['article_title']."</a></h4>
            <span>
                Posted in <a href = '#'>".$query_row2['category_name']."</a> by <a href=''>dr.nor</a> on <a href='#'>".$query_row2['article_date']."</a>
            </span>
        </div>
        <p>".$string2."</p>
    </li>";
}
}
if ($query3) { //display video
while($query_row3=mysql_fetch_assoc($result3)){

$string3 = strip_tags($query_row3['article_content']);
if (strlen($string3) > 200) {
$stringCut3 = substr($string3, 0, 200);
$string3 = substr($stringCut3, 0, strrpos($stringCut3, ' '))."... <a href='video-single.php?id=".$query_row3['article_content']."' title='view details' class='more'>Read More</a>";
}

$str = "<iframe id=\"player\" type=\"text/html\" width=\"700\" height=\"435\" src=\"http://www.youtube.com/embed/".$query_row3['article_video_link']."\" frameborder=\"0\" allowfullscreen></iframe>";
echo "
    <li>
        <span></span>
        <div>
            <h4><a href='video-single.php?id=".$query_row3['article_id']."' title='view details'>".$query_row3['article_title']."</a></h4>
            <span>
                Posted in <a href = '#'>".$query_row3['category_name']."</a> by <a href=''>dr.nor</a> on <a href='#'>".$query_row3['article_date']."</a>
            </span>
        </div>
        <p>";
        echo stripslashes($str);
        echo "</p>
        <div class='h5'></div>
        <p>".$string3."</p>
    </li>";
}
}

问题是,我想按日期显示它,无论是文章第一,视频第一还是Q&amp; A第一,但它按帖子类型(文章,Q&amp; A,视频)显示。我的意思是,在Article的循环结束之后(按日期desc排序)它将继续Q&amp; A等等。那么,我该如何解决这个问题呢? *抱歉我的英语不好,:))

1 个答案:

答案 0 :(得分:0)

不要使用三个查询。您只能从一个查询中获得准确的结果。

试试这个:

SELECT a.*, c.category_name
FROM articles a 
INNER JOIN categories c ON a.article_category_id = c.category_id 
WHERE c.category_id = '$id' AND a.article_type_id IN (1, 2, 3)
ORDER BY a.article_id DESC 
LIMIT $START, $LIMIT