プロが教える店舗&オフィスのセキュリティ対策術

直近のデータを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 ?> を貼り付けています

A 回答 (4件)

フィールド名については特に問題はないと思いますが


まぁ一般的な予約語は避けておいた方が無難です。

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

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

SELECT * FROM `mem` ORDER BY `rupdate` DESC LIMIT 3;
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2006/03/28 02:54

なんらかの記述ミスで、sqlの戻り値がなく


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

お世話かけました。。。

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

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

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

お礼日時:2006/03/27 22:05

>not a valid MySQL result resource


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

フィールド名を間違えているとかじゃないでしょうか
    • good
    • 0
この回答へのお礼

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

update → reg_date へ

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

お礼日時:2006/03/27 22:07

うまくいかないとはどのような状態なのでしょうか?


普通にやれば普通にソートされるとおもいます。

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

この回答への補足

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

更新日の新しい順にデータを並べようとしています、
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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!