PHPでデータベースの並び順を変更する方法

このQ&Aのポイント
  • PHPで作られたWebサイトでデータベースから引っ張ってきたデータを出力している箇所の並び順を「作成日順」に変更する方法について解説します。
  • 現在、PHPで作られたホームページの管理人が採用ページの編集をすると編集した箇所が一番上に来てしまうという問題があります。そこで、「作成日順」に並び替えることで解決できます。
  • 以下のコードを使用することで、データベースから取得したデータを「作成日順」に並び替えることができます。 $sql ='SELECT * FROM [ ] WHERE public=1 ORDER BY created_datetime DESC'; ORDER BYは整列するためのキーワードで、DESCは降順を意味します。
回答を見る
  • ベストアンサー

PHP 更新順を作成日順に変更したいです。

今PHPで作られたWebサイトでデータベースから引っ張ってきたデータを出力している箇所の並び順を「更新順」から「作成日順」に変更したく作業を進めています。 今抱えている問題はPHPで作られたホームページの管理人が採用ページの編集をすると編集した箇所が一番上に来てしまうという問題があり、それを一番上にしない為に「作成日順」に並び替えたいといった事がしたいのですがソースコードは手元にあっても ローカルのソースコードなので弄ってもサーバー側には反映されません。なのでどこをどういじれば解決するか目星だけでも付けておきたいのですが良かったら協力願います。 色々ソースコードを見る中で以下の一行にたどり着いたのですが このコードで更新順になる文は使用されていますか? -------------------------------- $sql ='SELECT * FROM [ ] WHERE public=1 ORDER BY updated_datetime DESC'; -------- ORDER BYが整列するみたいな意味?で DESCは降順という意味だと思いますが更新された物が一番上に来てしまう原因の予想があれば教えて頂きたいです。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5085/13290)
回答No.1

まさに「ORDER BY updated_datetime DESC」が原因でしょう。 「updated_datetime」というカラムにデータの更新日時が入っているのでしょうから(カラム名がそう示唆してる)、これをデータの作成日時が入っているカラムのカラム名に変更します。(created_datetime といったような名前のカラムがありませんかね) あとは昇順か降順かを決めて、昇順なら「DESC」を消し、降順ならそのまま「DESC」を残しておきましょう。

shin11shin
質問者

お礼

解決しました。ご協力感謝します!ありがとうございます!

関連するQ&A

  • PHPでつくる更新履歴 作り方と埋め込み方?

    いつもご教授ありがとうございます わたくしはタグうち?でHPを調べながら作成している超初心者です。なので、質問の仕方や説明の仕方に不備があるかと存じますがよろしくお願いいたします。 ホームページのトップによくあるスクロールバーのついた更新履歴を表示するボックスがあるかとおもいます。そこに、表示する内容を別のhtmlで作成し登録と表示をそれぞれPHPでtextfileを使用しfputsの上書きaモードでソースをくみたて、foreachで一行ずつ区切って表示させました。 ここで問題が… (1)表示されるのは古い順です。新しい順にするにはどうすればよいのでしょうか? (2)これをHPのhtmlに埋め込む場合、htmlからphpに拡張子をかえるのでしょうか? よろしくお願いいたします。 ソース 必要ならおもうしつけください。

    • ベストアンサー
    • PHP
  • php Carbonの構成について

    phpのCarbornのソースをよんでいます addMinutesメソッドのコードが見当たりません、phpdocの@methodにはあります。 addMinutesメソッドはDatetimeクラスに書かれているのでしょうか(Datetimeクラスのソースが見つけられませんでした)

    • 締切済み
    • PHP
  • 大変困っております。PHP DBにお詳しい方宜しく御願致します。

    初歩的なことかもしれません。 御助言頂きたいと思いご質問させて頂きます。 ポイントサイトを構築している途中で会員さんのポイント獲得ランキングを昇降順にDBより抽出しようと試みましたが無理でした。 こちらのソースからの後の記述が分かりません。 SELECT * FROM $k_user_table order by point DESC 結局分からぬまま最終的に以下の様にすることが精一杯でした。 ---------------------- <?php $point_count = $DB->getone("SELECT * FROM $k_user_table order by point DESC"); print $point_count; ?> ---------------------- この形でもやはり1件の獲得ポイントのみが出たり或いは一桁のちょっと訳が分からない数字が出たりします。 ポイントの高い順に10位まで表示したいと思っております。 テーブル名はこちらSELECT * FROM $k_user_table order by point DESCで間違いないはずなんですけどDBへの接続等その後のWHERE・=・<・>・等の記述方法の(~の場合~にする)の様な定義付けが分かりません。 先輩方の御助言頂けますでしょうか。 宜しく御願致します。

    • ベストアンサー
    • PHP
  • Order by句でバインド変数を使うには?

    SQL文のOrder by句で2つのバインド変数を用いて、ソートする項目・ソート順を決めたいと思い、以下のようなSQLを作成いたしました。 Select row_Number() Over(Order by Case :ITEM When 'PJコード' then PJコード When '部署コード' then 部署コード end Case :LINE When '1' then DESC When '2' then ASC end .... バインド変数を直接Order by句に入れますと、結果は帰ってくるのですが、バインド変数の値がすべて無視されてデータが出力されます。 以上の理由より、Case文にてバインド変数の値を参照し、ソートする項目と順番を決めております。 上記のソースで実行しますとORA-00907:右かっこがありませんというエラーが表示されます。 2つ目のCase文(:LINE)を消し、最初のCase文だけを残して、並び順(DESC・ASC)を埋め込むと、実行される状態になります。 Oracleのバージョンは11gです。 ご回答よろしくお願いいたします。

  • order by rank descでの並び替え。

    PHPからSQLITEのデータを並び替えて出力したいと思っています。 ~ $ord = $_REQUEST["ord"]; ~ if ($ord == 1) { $sql .= " order by rank desc"; // 並び順(人気) } else if ($ord == 2) { $sql .= " order by rank"; // 並び順(人気)逆順 } else { $sql .= " order by info.reg_date desc"; // 新人 } REQUESTによってrank順に並べ替えたいのですが、 SQLite Error select info.info_id as info_id,i1.value as info1 from info left join info_item i1 on info.info_id=i1.info_id where info.open=1 and i1.kind='info1' order by rank といったエラーがでてしまい行き詰っています。 原因のわかる方はいますでしょうか?

    • ベストアンサー
    • PHP
  • 妻が死ねばいいのに、と思っただんな様いらっしゃいま

    妻が死ねばいいのに、と思っただんな様いらっしゃいますか? http://okwave.jp/qa/q3252483.html?by=datetime&order=DESC この投稿の逆バージョンです

  • sqglについて

    sqlのlimitとdescは一緒に使えますか? 例 select * from hp order by limit id 0,20 order by id desc; idを小さい順に1~20個表示したいです。

    • ベストアンサー
    • MySQL
  • 掲載日と更新日の管理の仕方

    phpmyadminを使ってmysqlのデータを更新しています。 掲載日:2008年5月25日 更新日:2012年6月04日 というようにphpで表示し、掲載順、更新順といったソートをしたいと思っています。 phpmyadminで作ったテーブルは CREATE TABLE IF NOT EXISTS `data_data` ( `id` int(11) NOT NULL, `name` char(10) NOT NULL, `modified_date` date NOT NULL, `create_date` date NOT NULL, PRIMARY KEY (`id`), KEY `modified_date` (`modified_date`,`create_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `data_data` (`id`, `name`, `modified_date`, `create_date`) VALUES (1, '23434', '2012-06-04', '2012-04-02'), (2, '464645', '2012-06-03', '2012-03-04'), (3, '940968', '2012-06-03', '2011-03-23'), ・・・ (15000, '940968', '2012-06-03', '2011-03-23'); のようになっています。 SELECT * from data_data ORDER BY modified_date DESC LIMIT 0,50; phpでこの構文で取得します。 ・更新日を手作業で指定し直さないといけない。 ・掲載日より前の日付で更新日を入ることができて、おかしくなってしまう。 といったことになってしまいます。 phpmyadminを使っている限り仕方がないのでしょうか。 たとえば、一流なサイトはどうやって掲載日・更新日を管理しているのしょうか。

    • ベストアンサー
    • PHP
  • mysql内データ検索結果の表示順について

    mysql内のデータを条件検索する時、検索結果の表示順を指定します。 新着順(id降順)で指定する場合のエラーについてアドバイスをいただけないでしょうか。 例えば、DB内データを降順で全件表示する場合は、 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; とすることでできると思います。 そこで、条件検索で結果表示をする場合は、上記の通りにしてもエラーが発生します。これについてのコードは以下のような感じです。 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where); } これは、ORDER BY id DESCを書く位置が悪いのでしょうか? order by句は$query = select ~~~のあとに付けるという認識だったのですが、場合によって間違いとなるということなのでしょうか。 アドバイスをいただければ幸いです。

    • 締切済み
    • PHP
  • インターネット だれがどこで見ているか分かりますか

    インターネットって、誰がどこで見ているか分かりますか? (インターネット会社・インターネットプロバイダー会社など) お早めに回答お願いします。 前は、「見ている」ということが分かるか、質問しました。 http://okwave.jp/qa/q7865104.html?by=datetime&order=DESC