2014-07-15 108 views
0

更新:感謝大家的幫助,整個代碼位於文本的底部,並帶有巴西葡萄牙語註釋。如何以相反的順序顯示mySql數據

如何以相反順序顯示我在表格中的信息(使用PHP)?

例如可以說我有一個表的AUTO_INCREMENT id列作爲主鍵和一個name柱:

ID:1名稱:克里斯
ID:2名稱:埃倫
ID:3名稱:鮑勃
ID:4名:連

我需要表現出來的頁面是這樣的:

ID:4名稱:連
ID:3名:鮑勃
ID:2名稱:埃倫
ID:1名稱:克里斯

此代碼僅示出了它們在正常順序,因此遠遠有效,但它不完全是我需要的。

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>"; 
    } 
?> 

好吧,你們解決了我的問題,所以這是公平的,以顯示我正在嘗試做什麼。

我試圖得到相反的順序,因爲我想創建(作爲練習)保存博客標題及其內容的頁面。

我需要它以相反的順序顯示博客帖子,以便用戶可以從最新到最舊的時間查看它們。

我也不得不讓每一個博客的標題被用作鏈接到博客文章(現在它只能給人以exacly相同鏈接的引用,我的工作就可以了)

它也有有點HTML只是爲了創建一個帖子鏈接將會顯示的區域,它顯示了最多12個博客鏈接(同一行中有3篇文章,然後跳轉到下一行),如果博客帖子太大(超過90px),它包含了帶點的鏈接(標題)的其餘部分。

再次,對不起英語不好,我失去了實踐。

<?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> 
+6

使用'ORDER BY'來告訴MySQL要排序哪一列,並使用'DESC'來顛倒順序....'SELECT * FROM titulos ORDER BY id DESC' – Travesty3

+0

正如Travesty3所說,使用ORDER BY。你可以隨時對數據進行排序,但最好讓SQL查詢儘可能地完成工作。 SQL爲此做了優化,並且你不太可能做出一些愚蠢的事情,因爲所有的程序員都是這樣做的。* grin *) –

+0

只需將一個'ORDER BY id DESC'子句添加到第一個查詢。整個'for'循環看起來不對。看起來完全沒有必要,而且效率非常低(對每個'id_Noticia'值運行一個單獨的查詢,而且我們通常不能保證'id_Noticia'列中的值將是連續的整數值;設計'for'循環看起來完全破壞了,mysql接口已經被棄用了;你應該使用PDO或者mysqli來進行新的開發 – spencer7593

回答

0

只需添加一個ORDER BY子句查詢。

SELECT * FROM titulos ORDER BY id_Noticia DESC 
         ^^^^^^^^^^^^^^^^^^^^^^^^ 

MySQL將以指定的順序返回行。 (關鍵字DESC表示行將按降序返回,最高值在前。)

擺脫for循環及其內容。 while (fetch)是正確的模式。


注: PHP mysql_界面已經過時了。新的開發應該使用PDOmysqli接口。

+0

它的工作非常靈活,正如您所說,非常感謝 – Xmayro

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>"; 
} 
+0

它沒有工作,也許我應該改變一些東西在for語句 – Xmayro

+0

採取選擇語句和查詢($ i = 0; $ i <$ totalrows; $ i + 1)$ _Str =「SELECT Titulo FROM titulos WHERE ORDER BY id_Noticia DESC」; $ show = mysql_query($ _ St​​r,$ conect) {echo $ show [i] ['Titulo']。「
」;}' –

+0

@LIUFA :這應該使用'while fetch'循環;不是'for'循環。 – spencer7593

0

試試這個:

$result = mysql_query("SELECT * FROM titulos ORDER BY id_Noticia DESC", $conect); 

可以得到後瞭解ORDER BY ... DESChere

+0

感謝您的幫助。 – Xmayro

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

+0

感謝您的幫助夥伴,我現在就學習它 – Xmayro