2011-05-02 46 views
2

我在phpmyadmin中有一個存儲'id'(auto inc),'title'和'date'的表。PHP數組中的數據庫

我有一個網頁,其中顯示10個最新項目(我簡單地按ID排序)。 在該頁上我打印標題和日期。我的願望是也顯示已發佈項目的編號,所以第一個發佈的項目是1,第二個是2等。我不能簡單地從數據庫中打印ID,因爲如果我刪除一行,數字不是直的了。

我的想法是將所有的數據放在一個數組中,但我不知道最好的方法是做什麼以及如何打印該項目編號。例如,當我想要顯示第54個項目時,我可以輕鬆打印$ items [54] [id]或其他東西,它會顯示數字54並顯示我打印$ items [54] [title]的標題。

我不知道是否有簡單的方法,加上數組總是從0開始,但我的項目必須在1

除了這個頁面顯示10個最新的項目啓動,還有另外一個頁面,它從URL中獲取該項目的標題。我將如何搜索數組中的標題並以相同的方式顯示數據,但僅限於請求的標題?

在此先感謝!

回答

1
"SELECT COUNT(id) as cnt FROM mytable"; 

您可以選擇所有數據庫條目的計數。

,然後將其分配給你的迭代

$i = $row['cnt']; // this will hold the ammount of records e.g. 21 

// other query 

while($row = mysql_fetch_assoc($result)) { 
echo $i; 

$i--; // this will decrement on every iteration 21, 20 , 19, and so on. 
} 
+0

適用於最新的10個項目,但如果我發佈了30個項目會如何。它會顯示項目21到30,對不對?所以它也必須顯示每個發佈項目的數量。另外請查看下面你的回答的評論,因爲當我搜索一個特定的標題並從URL中獲得它時,我仍然不知道這是我發佈的第4或第88項。 – 45808 2011-05-02 12:38:41

+0

哦,你的意思是分頁?我會爲此添加一些示例。 – Headshota 2011-05-02 12:40:54

+0

沒有不是分頁:)。將其視爲博客項目。在一頁上,我展示了最新的10個博客文章。假設我的表格中有20個項目,我添加了另一個項目,它將是第21個發佈的項目。對?因此,當我顯示10個最新商品時,它會顯示商品12到21.它必須在每個商品上顯示該數字。即使我搜索第21項的標題,它也必須顯示21. – 45808 2011-05-02 12:49:42

0

我不知道如何準確地打印出您的數據,但我認爲那裏有一個循環。只需設置一個計數器,每行增加一個並打印其值。

至於標題搜索,您必須運行WHERE title = '$title'條件的另一個查詢,但要小心SQL injection

+0

但是,確切地說,但是這種方式我得到的數據,但我不知道它是什麼樣的張貼的項目。假設所要求的標題是我發佈的第14個項目,那麼腳本現在將如何成爲第14個發佈的標題? – 45808 2011-05-02 12:36:44

+0

哦,你只通過最後10項列表搜索?你可以使用相同的循環,但只打印'如果來自URL的DB == title的標題,同時保持計數器運行。對於大型查詢來說不是最好的性能,但它應該可以用於10個項目。 – Vache 2011-05-02 12:42:18

1

第一關。我會在數據庫中添加一個時間戳字段,然後按順序排列,因爲它感覺總體上更加可靠,併爲您提供可能稍後便於使用的其他詳細信息。

要創建多維數組我會做這樣的事情:

$result = mysql_query(...);
$items = array();
while($item = mysql_fetch_assoc($result)) {
$items[] = $item;
}

現在$項目[12]例如會給你的項目編號13(因爲它是0索引)。

最後,只選擇具有特定標題的項目,我會用一個查詢,其中包括一個WHERE子句,像

"SELECT ... FROM ... WHERE title = '".$title."'"

這是非常重要在使用前消毒這個變量儘管查詢。

你可以在很多地方閱讀關於MySQL的更多信息。一個快速的谷歌搜索給了我:http://www.tutorialspoint.com/mysql/index.htm

+0

當我打印數組的鍵時,它從0開始爲我的第一個項目。我怎樣才能從1開始?因爲如果有人搜索第一個發佈項目的標題,它也可能顯示0而不是1. – 45808 2011-05-02 13:05:40

+0

您可以將1添加到它,對不對? – 2011-05-02 13:29:46

1

你應該在開始使用PHP編程之前學習PHP;)閱讀並使用PHP手冊和一些教程!

至於你的問題,這是一個簡單的循環,你想要做的。作爲例子的一種方式。

以任何你喜歡的方式從數據庫中獲取10個最後的項目,下面是一些代碼,部分是僞代碼。

$markup = ''; 

for ($i=1; $i<=count($items); $i++) 
{ 
    $markup .= 'Item ' . $i . ': ' . $items['date'] . ' - ' . $items['title']; 
    $markup .= '<a href="/path/to/postpage/id/' . $items['id'] . '">read more</a>'; 
    $markup .= PHP_EOL; 
} 

echo $markup;