質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.12%

Mysql 全データの取得(PHP)

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,904

ryohasegawa

score 124

Mysqlのテーブルに5件のデータがあります。
そのデータを全部取得したく、プログラムを書きました。anumberを基準に降順か昇順のどとらかで取得したいんですが、一番上(1)を取ってきてから、今度は下から順番に取ってきます。
この問題で困ってます。

+---------+---------------+-----------+----------+---------------------------+-----------+
| anumber | id            | firstname | lastname | email                     | nickname  |
+---------+---------------+-----------+----------+---------------------------+-----------+
|       1 | *****  | ***    | *       | *************    | ***    |
|       4 | *****    | **      | **     | ************* | ***    |
|       5 | *****     | ***    | *       | *************    | ***    |
|      12 | *****          | ***    | *       | *************     | ***    |
|      17 | *****     | *        | *       | *****      | ***    |
+---------+---------------+-----------+----------+---------------------------+-----------+


データベースからの呼び出しSQL文

public function findAll() {
    $stmt = $this->db->query("select * from users order by id");
    $stmt->setFetchMode(\PDO::FETCH_CLASS, 'stdClass');
    return $stmt->fetchAll();
  }


表示PHP

<?php
        $userModel = new \MyApp\Model\User();
        $userlist = $userModel->findAll();
        for($i = 1; $i < count($userlist); $i++){
            echo "番号 : ".$userlist[$i]->anumber;
        }
        ?>


こうやってます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

id でソートしてるからじゃないスか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/29 00:40

    解決できました。
    ありがとうございます。

    キャンセル

+1

がると申します。

「anumberを基準に降順か昇順のどとらかで取得したい」のであれば。
anumberのデータ型がintである前提ではあるのですが、SQL文の「order by id」を「order by anumber」に変えるだけでよい、かと思うのですが、如何でしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/29 00:41

    ありがとうございます。解決しました。

    キャンセル

+1

「この問題」って宿題かなんかですか??
PHPですが何らかのフレームワークだと思いますので本来はそれも書かないといけません。

このコードを書けた、自分で書いたので無くとも理解してるのならこの質問は出てこないと思うのですが・・・・

order by id


の部分が今は「id」順に並び替えをするように定義してます。

order by anumber


にすればanumberで並び替えをして、何も付けなければ昇順(ASC)でDESCを付ければ降順になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/29 00:36

    order by id としていた場合はID順にソートしている = 1,4,5,12,17で並ぶはずですよね?
    でも、1、17、12,5,4で並んで出力されるんです。

    キャンセル

  • 2017/05/29 00:46

    質問に書かれているコードですとid順に並ぶはずなので他の皆さんも私と同じ答えをしてらっしゃるわけです。

    あと「id順だと・・」と言われてますが、質問文は「id」列は「*」で隠されてるのでこちらではわかりようがないでしょう?
    上のコメントの話だと「anumber」順の話でしょう。
    「id」順にソートした場合に「anumber」が1 17 12 5 4に並んでるって言うだけなのでは?


    ですので、もし間違いなくコメントが正しいのでしたら何らかの他のコードが悪さしてると思うのですがいかがでしょうか?

    上記が再現する最低のコード、データを質問には書かないと質問者さん以外の人はエスパーで答えるしか無いので質問者さんから見て役に立たない答えにしかならなかったりするのでどうしようも無いのですよ・・

    キャンセル

  • 2017/05/30 23:38

    なるほど、説明ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる