marimodesuのブログ

シーカヤック、大谷翔平、ゲーム、アニメ、プログラムの趣味をたくさん書いていきます。

データベースから最新のレコードを件数指定したあと昇順に並べる方法(PHP/SQL)

最近、プログラムを勉強していて、PHPMYSQLを使ったバックエンドの処理をホームページを作りながら機能追加したりして練習しています。

今回は初心者なりに解決したことを書きたいと思います。

今回はデータベースで最新のレコードを件数指定で検索し、その後、降順から昇順に変更した方法を記載します。

キーワードとしては『desc』『asc』『array_reverse()』あたりです。

 

作成中のホームページ↓

 

今回、チャット機能をPHPMYSQLを使ってメッセージ管理をして表示させるプログラムを作っています。

 

完成ページはこんな感じ↓


下の投稿フォームに入力して、送信を押すと一番したにコメントできるようなチャット機能です。表示件数は30件とし、データベースが増えすぎないように、一定の件数が登録されると過去テーブルから消していく機能を追加しています。

 

今回は前者の表示件数を最新の30件で検索し、昇順にした方法になります。

(初心者なりに考えたことなので。。。お手柔らかにお願いします)

 

例えばチャットのテーブル上だと、上からレコードでこんな風に登録されています。

chat_id  name   content

1   太郎 おはよう

2   花子 おはよう

3   太郎 今日はどんな調子?

↓    ↓   ↓

49  太郎  いいね。野球したい。

50  一郎  じゃぁ、明日遊ぼう

 

こいつの最新30件をサイト上に表示させたいので、chat_idの21~50をとってきて、画面に表示させるようにします。

先に完成画面をお見せするとこんなかんじです。※コメント数は絞っています。

 

テーブルデータの取得はこんな感じです。

         // テーブルデータの取得
        public function getAllNewData($newData){
            $dbh = $this->dbConnect();
            $sql = "SELECT * FROM
           $this->table_name
          ORDER BY
           chat_id desc limit $newData";
            $stmt = $dbh->query($sql);
            $result = $stmt->fetchall(PDO::FETCH_ASSOC);
            return $result;
            $dbh = null;
        }


chat_idのカラムを指定して、desc limitで降順から$newData→引数で表示させたい件数(今回は30)を入れます。これにより、chat_idの最新のデータから30件を引っ張て来てくれます。

ただし、ここで問題が発生。

もう一度チャットページを見てみましょう。

 

降順でひっぱてきているため、一番上が最新のコメントになってしまいました。チャットの見栄え的に一番上を古いのにして、一番下を最新のコメントにしたいです。

今はchat_idでは50→49→48→47→・・・→22→21という順で戻り値を返しています。

これを21→22→23→・・・→49→50という順番に直したいので、関数を探したところ、下記の関数がありました。

array_reverse();

戻り値で帰ってきた降順のデータに上記の関数をぶっこみます。

例↓

<?php
    require_once('chat.php');

    $chat = new Chat();
    // 表示件数
    $newData = 30;
    $chatData_before = $chat->getAllNewData($newData);
    // 最新表示件数を逆順に
    $chatData = array_reverse($chatData_before);
?>

 

これで最新の30件のデータを検索し、その30件の中で昇順に変換してくれました。

これでもう一度、画面にうつしたものを見てみます。

これで、一番上が最新30件の中で古いもの、一番下が30件の中で新しいものになりました。

 

最初、SQL文をdescではなく、ascにすれば?とも思ったのですが、そうなると、50件あるデータの中から一番古いものから30件を昇順で表示されてしまいました。※最新のコメントは表示できません。

欲しい情報は最新の30件の昇順だったので、上記のプログラムに書き換えた感じです。

 

恐らくベテランの人は他にもっと良いやり方や別のやり方もご存じかもしれませんが、初心者なりに考えて、調べながら実装できたので非常に勉強になりました。

ちょっとプログラムが楽しくなってきたので、他にも機能を追加していきたいと思います。