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

Posted

技术标签:

【中文标题】使用 if 语句显示表中的记录【英文标题】:display records from a table using if statement 【发布时间】:2014-02-01 00:22:26 【问题描述】:

我现在正在为我的班级项目创建一个博客。在此之前,我询问了限制显示字符的问题,有人帮助了我。现在我有 3 种不同类型的帖子;文章、问答和视频,但我把它们放在同一张桌子上。我想按类别显示它并有分页,我已经做到了。在 Category.php 中,我想按类别显示帖子并按日期 desc 顺序对其进行排序,如果用户单击“阅读更多”链接,它会将它们重定向到包含完整文章的新页面。例如,如果用户点击 Q&A 的“阅读更多”链接,它会将他们重定向到 qna-single.php,如果用户点击视频的“阅读更多”链接,它会将他们重定向到 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>";


问题是,无论是文章优先、视频优先还是问答优先,我都想按日期显示,但它是按帖子类型(文章、问答、视频)显示的。我的意思是,在文章的循环结束后(按日期排序),它将继续进行问答等。那么,我该如何解决呢? *对不起我的英语不好,:)

【问题讨论】:

为什么会有 3 个不同的查询?将这三个查询联合起来,并用 ORDER BY 将它们包装起来,或者(更好的主意)只需将 articles.article_type_id='3' 更改为 articles.article_type_id IN(1,2,3),然后在其末尾添加一个 ORDER BY。 - 但也许我不太明白你在做什么。 其实我不确定我在做什么。但是,我可以解释的是,在此之前我已经尝试过使用 1 个查询,但它没有显示我想要的结果,或者我想我对此并不完全理解。所以用这种方法我可以得到我想要的结果,即使这不是我想要的。感谢您的反馈意见。 :) 【参考方案1】:

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

试试这个:

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

【讨论】:

感谢您的及时回复。显然它比我的更简单易懂。我会尝试以我想要的方式显示结果。再次感谢! :)

以上是关于使用 if 语句显示表中的记录的主要内容,如果未能解决你的问题,请参考以下文章

如题:如何用一条SQL语句按输入的参数进行判断执行查询数据

访问表单中的 IF 语句

SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别

Vuejs IF 语句

在mysql if语句中使用另一个表中的列

最后插入的记录未反映在使用 JDBC 的 mysql 中的 select 语句中