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

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

新規登録して質問してみよう
ただいま回答率
85.47%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2216閲覧

SQL文の order by ~ について

alkeran

総合スコア29

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/01/31 13:59

データベースのあるデータを、フィールドの"date"の日付け順にwebサイトに表記させるために、
select * table_name where ~ order by date desc
とsql文を書き接続しました。
1月1日から1月30日まではデータが表記されるのですが、1月31日だけ1つのデータも表記されません。
どなたかご教授をお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

あまり詳しくはないのですが、よくあるミスとして、Where句の指定で、1月31日の23時59分59秒まで指定していないから、1月31日の0時扱いになっていて、実質前日までしか見えないとかはありえますね。

投稿2016/01/31 14:08

thom.jp

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alkeran

2016/02/01 04:34

ありがとうございます。 そうゆう事だったんですね。解決しました。
guest

0

order by~の問題ではなくtimestamp型やdatetime型の列に対してdate型で比較するとその結果になると思います。'2016-01-31'は'2016-01-31 00:00:00'と解釈されて実行されるはずです。

MySQLなら以下の条件句で比較実行すると違う結果になると思います。

where create_date BETWEEN '2016-01-01' AND '2016-01-31'
where create_date BETWEEN '2016-01-01 00:00:00' AND '2016-01-31 23:59:59'

postgreSQLではBETWEENの替わりに<>で比較しますが同様です。

where create_date>='2016-01-01' AND create_date<'2016-01-31'
where create_date>='2016-01-01 00:00:00' AND create_date<='2016-01-31 23:59:59'

シェルまたはphpMyAdminなどでSQLを実行して比較してみてください。
(動作確認後に日付と列名を書き換えたのでミスがあるかもしれません)

SQL全体またはwhere句も提示していただけるともっと的確な回答が可能になります。

投稿2016/02/01 04:33

chinyato

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alkeran

2016/02/01 06:08

早速の回答ありがとうございます。 詳細は、ある店舗のある不動在庫の情報を全店舗で共有する掲示板のようなwebサイトです。登録日順にその不動在庫が掲示板に table 形式で表示されるのですが、毎月31日になると全て表記されなくなってまうのです。 登録日はデータベース上ではdate型になっておりdatetime型ではありません。それが原因ではないかと思っております。sql文は下記のとおりです。 (periodは不動在庫の期限のfield名、tourokubiは掲示板への登録日のfield名です) $statement = $pdo->prepare( "select * from deadstock_table where !( period <'".$now."') order by tourokubi desc , period asc");
chinyato

2016/02/01 14:07

31日の日付分が表示されないのではなく、31日にクエリ実行結果が0件になるということでしょうか? 提示していただいた条件でテーブルを作成して、以下のSQL文でテストをしてみましたが正常に実行されます。 CREATE TABLE IF NOT EXISTS `deadstock_table` ( `stock_id` int(11) NOT NULL, `period` date NOT NULL, `period_dttm` datetime NOT NULL, UNIQUE KEY `stock_id` (`stock_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; select * from deadstock_table where !( period <'2016/01/31') ------------------------------------------ 3 2016-02-01 2016-02-01 00:00:00 4 2016-02-01 2016-02-01 19:15:33 select * from deadstock_table where !( period <'2015/12/31'); ------------------------------------------ 1 2016-01-18 2016-01-18 00:00:00 2 2016-01-30 2016-01-30 10:12:27 3 2016-02-01 2016-02-01 00:00:00 4 2016-02-01 2016-02-01 19:15:33 (ちなみに'2015-12-31'でも'2015/12/31'と、年月日区切りは-でも/ でも動きます) とすると怪しいのは代入している $now となります。 datetime型の場合は以下のように日付文字列を作成しますがどう記述されているのでしょうか? $now = date("Y/m/d H:i:s"); SQL文をログファイルに保存するか見えないようにコメント文としてHTML中に表示して$nowが31日にどう表示されるか確認されるのが宜しいかと思います。 自分はうまく動かない時にはSQL文を表示して、コピーしてAdmin画面に貼り付けて実行してみてエラーが起きていないか確認・修正しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問