• ベストアンサー

PHP+MYSQLで直近3件のデータ表示

直近のデータを3件表示するのに $sql =" select * from テーブル order by フィールド(date型) desc limit 3" ; だとうまくいくのですが DATETIME形に変えるとうまくいかないのは、何か変な事してますでしょうか? $sql =" select * from テーブル order by フィールド(datetime型) desc limit 3" ; 他の箇所は両方とも全く一緒です。 データは入れてあります。 宜しくお願いいたします。 全文は書けなかったので <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql =" select * from mem order by rupdate desc limit 3" ; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "<B>$recmax 件のデータがみつかりました。</B>"; $body .= "<TABLE border='1' cellpadding='2' cellspacing='0'> <TR> <TH bgcolor='#00CCCC'>会員ID</TH> <TH bgcolor='#00CCCC'>会員名</TH> <TH bgcolor='#00CCCC'>性別</TH> <TH bgcolor='#00CCCC'>ジャンル</TH> <TR>\n"; while($col = mysql_fetch_array($rst)) { $body .= "<TR>\n"; $body .= "<TD>" . $col["id"] . "</TD>\n"; $body .= "<TD>" . $col["name"] . "</TD>\n"; $body .= "<TD>" . $col"seibetu"] . "</TD>\n"; $body .= "<TD>" . $col["cate"] . "</TD>\n"; $body .= "</TR>\n"; } $body .= "</TABLE>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> 以下 <?= $body ?> を貼り付けています

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

フィールド名については特に問題はないと思いますが まぁ一般的な予約語は避けておいた方が無難です。 一応、厳密に守る必要はないのですが、テーブル名や フィールド名は``で囲む、データは''でかこむ。 SQLの文字は大文字でかく。文末には;か\gをつける。 ・・・という癖をつけておくと見やすいソースに なります。 初心者の方には是非実践していただきたいところです。 たとえば、以下の感じ select * from mem order by rupdate desc limit 3 ↓ SELECT * FROM `mem` ORDER BY `rupdate` DESC LIMIT 3;

kiyomidesuyo
質問者

お礼

重ね重ねありがとうございます。 少しずつですが、yambejp 様の回答を頂いているうちに そのようなルールがわかって来たような気がします。 **参考書には記述がまちまちなので。。 **そのようなルールがわかってないばかりに、余計遠回りしているような気がします。 本当にいつもありがとうございます。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

なんらかの記述ミスで、sqlの戻り値がなく 配列にならないのでwhileで廻せないという エラーでしょうね。 フィールドがdatetimeだからというわけではなく、 どこかしら記述に問題があると思いますので dateの時に問題がなかったのであれば、 そのソースとよく見比べながらリトライしてみて ください

kiyomidesuyo
質問者

お礼

お世話かけました。。。 フィールド名をupdate から reg_date へ変更したら ちゃんと表示するようになりました。 使ってはいけないフィールド名なのでしょうか? とにかくチャンと表示するようになりました ありがとうございました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

>not a valid MySQL result resource クエリーの結果が得られていないようです $rst = mysql_query($sql, $con) or die(mysql_error()); みたいにしてエラーを表示させてみましょう フィールド名を間違えているとかじゃないでしょうか

kiyomidesuyo
質問者

お礼

フィールド名を変更したら表示するようになりました。 update → reg_date へ ご回答ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

うまくいかないとはどのような状態なのでしょうか? 普通にやれば普通にソートされるとおもいます。 どのようなデータだと、どう表示されるなど 具体的な質問をなさると有効な回答が得られるかも しれません。

kiyomidesuyo
質問者

補足

いつもお世話になっています。 更新日の新しい順にデータを並べようとしています、 date型 だと同じ日の扱いがどうなるのか分からないので datetime型 へ変更しようとしてうまくいきません。 date (フィールド名 regdate)で並び替えるよりも、datetime で並び替えた方がいいかと思い 別にフィールドを作り、型をdatetime フィールド名をupdate にしました。 そこで単純に regdate を update に変えたら以下のようなエラーが帰ってきます Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /virtual/wave/public_html/m/test--catelist.php on line 21 21行目は while($col = mysql_fetch_array($rst)) { です "探したけど、データがありませんよ" と言うことなのでしょうか? 宜しくお願いいたします。 ****datetime フィールドには10個ほどデータを入れています*** 

関連するQ&A