みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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 ?> を貼り付けています

投稿日時 - 2006-03-25 12:25:43

QNo.2050483

困ってます

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

フィールド名については特に問題はないと思いますが
まぁ一般的な予約語は避けておいた方が無難です。

一応、厳密に守る必要はないのですが、テーブル名や
フィールド名は``で囲む、データは''でかこむ。
SQLの文字は大文字でかく。文末には;か\gをつける。
・・・という癖をつけておくと見やすいソースに
なります。
初心者の方には是非実践していただきたいところです。

たとえば、以下の感じ
select * from mem order by rupdate desc limit 3

SELECT * FROM `mem` ORDER BY `rupdate` DESC LIMIT 3;

投稿日時 - 2006-03-27 22:51:47

お礼

重ね重ねありがとうございます。

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

本当にいつもありがとうございます。

投稿日時 - 2006-03-28 02:54:35

ANo.4

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

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

投稿日時 - 2006-03-27 10:21:02

お礼

お世話かけました。。。

フィールド名をupdate から reg_date へ変更したら
ちゃんと表示するようになりました。

使ってはいけないフィールド名なのでしょうか?

とにかくチャンと表示するようになりました
ありがとうございました。

投稿日時 - 2006-03-27 22:05:36

ANo.2

>not a valid MySQL result resource
クエリーの結果が得られていないようです
$rst = mysql_query($sql, $con) or die(mysql_error());
みたいにしてエラーを表示させてみましょう

フィールド名を間違えているとかじゃないでしょうか

投稿日時 - 2006-03-27 09:48:01

お礼

フィールド名を変更したら表示するようになりました。

update → reg_date へ

ご回答ありがとうございました。

投稿日時 - 2006-03-27 22:07:54

ANo.1

うまくいかないとはどのような状態なのでしょうか?
普通にやれば普通にソートされるとおもいます。

どのようなデータだと、どう表示されるなど
具体的な質問をなさると有効な回答が得られるかも
しれません。

投稿日時 - 2006-03-26 01:29:24

補足

いつもお世話になっています。

更新日の新しい順にデータを並べようとしています、
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個ほどデータを入れています*** 

投稿日時 - 2006-03-26 16:37:54

あなたにオススメの質問