使用 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 语句显示表中的记录的主要内容,如果未能解决你的问题,请参考以下文章