更新:感谢大家的帮助,整个代码位于文本底部,并附有巴西葡萄牙语的评论。
我究竟如何以相反的顺序显示我在表格中使用的信息(使用PHP)?
例如,假设我有一个包含AUTO_INCREMENT id
列的表作为主键和name
列:
id:1姓名:Cris
id:2姓名:Elen
id:3姓名:Bob
id:4姓名:Lian
我需要在页面中显示它:
id:4姓名:连
id:3姓名:Bob
id:2姓名:Elen
id:1姓名:Cris
此代码仅以正常顺序显示它们,到目前为止它可以正常工作,但它并不完全符合我的需要。
PS:我使用了$result
和$rows
来计算我有多少行,并尝试在for
函数中使用它但它没有用。
<?php
$conect = mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("Noticias", $conect) or die(mysql_error());
$result = mysql_query("SELECT * FROM titulos", $conect);
$totalrows = mysql_num_rows($result);
echo "$totalrows Rows test edit<br>";
while($row = mysql_fetch_array($result)) {
echo $row['Titulo'];
echo "<br>";
}
for($i=$totalrows;$i>=0;$i-1){
$_Str ="SELECT Titulo FROM titulos WHERE id_Noticia=".$i."";
$show = mysql_query($_Str, $conect);
echo $show['Titulo']."<br>";
}
?>
好的,你们解决了我的问题所以只展示我想做的事情是公平的。
我试图获得相反的顺序,因为我想创建(作为练习)一个保存博客标题及其内容的页面。
我需要它以相反的顺序显示博客文章,以便用户可以看到它们从最新到最旧。
我还必须将每个博客标题用作博客文章的链接(现在它只提供了对相同链接的引用,我正在研究它)
它还有一些HTML只是为了创建一个显示帖子链接的区域,它显示最多12个博客链接(同一行中的3个帖子,然后它跳转到下一行),如果是博客文章太大(超过90像素)它用点覆盖了链接的其余部分(标题)。
再次,抱歉英语不好,我没有练习。
<?php
//coneção com o banco de dados onde os dados das nopticias estão salvos
$conect = mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("Noticias", $conect) or die(mysql_error());
//Calcula quantas noticias existem salvas no banco de dados, pdoe ser usado
//quando o usuario quiser ver todas as noticias
$result = mysql_query("SELECT * FROM titulos", $conect);
$totalrows = mysql_num_rows($result);
//ordena as noticias em ordem decrecente(da mais nova para a mais velha)
//e salva em um array
$result2 = mysql_query("SELECT * FROM titulos ORDER BY id_Noticia DESC", $conect);
$lista = array();
while($row= mysql_fetch_array($result2)) {
$lista[].=$row['Titulo'];
}
//variaveis para manipular quantas noticias aparecerão
$a=0;
$b=0;
?>
<html>
<head>
<title>Painel de Noticias!!!</title>
<style>
//cria a area onde os titulos aparecerão
.boxed {
border: 2px solid green ;
width: 300px;
}
//encobre com pontos qualquer parte do titulo que ultrapasse mais de 90 pixels
.espaco90 {
width: 90px;
float: left;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
</style>
</head>
<body>
<div class="boxed" >
<p>
<?php
//seleciona os titulos e aplica um link para eles, aqui falta um meio de determinar os links para cada
//titulo existente no banco de dados, más como isso
//será usado em conjunto com o wolrd press então eu creio
//que não seja necessário aha não ser que você queira
for($i=0;$i<=$totalrows-1;$i++){
echo "<div class='espaco90'><a href='http://www.w3schools.com'>".$lista[$i]."</a></div></p><p>";
$a=$a+1;
$b=$b+1;
if($b<12){
if($a>=3){
echo "<br>";
$a=$a-3;
}
}else{
echo"<br>";
break;
}
}
?> </p>
</div>
</body>
</html>
答案 0 :(得分:1)
这应该以相反的顺序获得项目
$_Str ="SELECT Titulo FROM titulos WHERE ORDER BY id_Noticia DESC ";
$show = mysql_query($_Str, $conect);
for($i=0; $i<$totalrows; $i+1) {
echo $show[i]['Titulo']."<br>";
}
答案 1 :(得分:0)
试试这个:
$result = mysql_query("SELECT * FROM titulos ORDER BY id_Noticia DESC", $conect);
您可以了解ORDER BY ... DESC
here
答案 2 :(得分:0)
将数据传输到数据结构后,可以使用array_reverse()函数。这是array_reverse函数的一个实现:
<?php
$a=array("a"=>"Volvo","b"=>"BMW","c"=>"Toyota");
print_r(array_reverse($a));
?>
有关详情,请访问以下链接:http://www.w3schools.com/php/func_array_reverse.asp
答案 3 :(得分:0)
只需在查询中添加ORDER BY
子句即可。
SELECT * FROM titulos ORDER BY id_Noticia DESC
^^^^^^^^^^^^^^^^^^^^^^^^
MySQL将以指定的顺序返回行。 (DESC
关键字表示将按降序返回行,其中最高的值是第一个。)
摆脱for
循环及其内容。 while ( fetch )
是正确的模式。
注意:不推荐使用PHP mysql _ 接口。新开发应使用 PDO 或 mysqli 界面。