2011-05-02 10 views
2

phpmyadminに 'id'(auto inc)、 'title'、 'date'というテーブルがあります。PHP配列のデータベースデータ

最新の10個のアイテムを表示するウェブページがあります(IDで注文するだけです)。 そのページにタイトルと日付を印刷します。私の願いは、投稿されたアイテムの番号も表示することです。最初の投稿アイテムは1、2番目のアイテムは2などです。データベースを削除するだけでは、IDを印刷できません。もう

私の考えは、すべてのデータを配列に入れることでしたが、これを行うための最良の方法とそのアイテム番号をどのように印刷することができるかわかりません。たとえば、54番目のアイテムを表示したい場合、$ items [54] [id]などを簡単に印刷できます。数字54が表示され、タイトルを表示するには$ items [54] [title]を表示します。シンプルな方法があるかどう

私にはわからない、プラス配列は常に0から始まりますが、私の項目が10個の最新のアイテムを示し、このページのほかに1

で開始する必要があり、それ別のページがありますアイテムのタイトルを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

+0

あなたは改ページを意味しますか?私はそのためのいくつかの例を追加します。 – Headshota

+0

ページング用にはありません:)。それをブログの項目として見てください。 1つのページに最新の10のブログアイテムを表示します。テーブルに20個のアイテムがあり、別のアイテムを追加すると、21番目に表示されたアイテムになります。右?したがって、最新の10個のアイテムを表示すると、アイテム12〜21が表示されます。アイテムごとに番号を表示する必要があります。 21番目のタイトルのタイトルを検索しても、それは21を表示する必要があります。 – 45808

0

データを正確にどのように出力するのか分かりませんが、そこにループがあると仮定します。すべての行で1ずつインクリメントするカウンタを設定し、その値を出力します。

タイトル検索に関しては、WHERE title = '$title'の条件で別のクエリを実行する必要がありますが、SQL injectionには注意してください。

+0

しかし、そのようにしてデータを取得しましたが、投稿されたアイテムの数がわかりません。要求されたタイトルが私が投稿した14番目のアイテムであったとしましょう、スクリプトは今どのように14番目の投稿されたタイトルですか? – 45808

+0

ああ、最後の10項目のリストだけで検索しますか?同じループを使用することもできますが、カウンタを実行したままで、 'URLからのタイトル= DBのタイトル==タイトルのみ 'を印刷することができます。ビッグ・クエリーでは最高のパフォーマンスではありませんが、10個のアイテムで問題ありません。 – Vache

1

まずオフに割り当てます。私はデータベースにタイムスタンプフィールドを追加し、代わりにそれによって全体的な信頼性が増し、後で便利になるかもしれない追加の詳細が得られます。 (それは0・インデックス付きなので)今例えば$項目[12]あなたの項目番号13を与えるだろう

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

:私はのような何かをするだろう多次元配列を作成するには

最後に、私は

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

のようなWHERE句が含まれてクエリを、使用する特定のタイトルを持つ唯一の項目を選択することです非常にで使用する前に、この変数をサニタイズすることが重要クエリを実行します。

多くの場所でMySQLについて詳しく読むことができます。あなたはすばやいグーグルグーグルで私にこれを与えました:http://www.tutorialspoint.com/mysql/index.htm

+0

配列のキーを印刷すると、最初の項目で0から始まります。 1から始めるにはどうしたらいいですか?誰かが最初に投稿したアイテムのタイトルを検索すると、1の代わりに0が表示される可能性があります。 – 45808

+0

これに1を加えることはできますか? –

1

PHPでプログラミングを始める前にPHPを学ぶべきです;)PHPマニュアルとチュートリアルを読んで作業してください!

あなたの質問には、あなたがしたい簡単なループです。例としてそれを行う1つの方法。

いくつかのコードに続いて、好きな方法でデータベースから最後の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;