• ベストアンサー

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

  • PHP
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • 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

  • 縦に長い<table>でなく横に長い<table>を組むためのfor文の書き方

    文末のコードを実行すると、下記のような結果が得られますが、 番号 名前 性別   1 阿藤 男   2 江藤 男   3 加藤 女   4 木藤 女   5 工藤 男 行列を入れ替えた表をつくりにはどういうロジックになりますか。 番号   1   2   3   4   5 名前  阿藤  江藤  加藤  木藤  工藤 性別   男   男   女   女   女 おそらく、for文を改造するのでしょうが・・・ よろしくお願い致します。 <?php $con = mysql_connect(SERVER, USER, PASS); $selectdb = mysql_select_db(DB, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "<table border='1'><tr><th>番号</th><th>名前</th><th>年齢</th><tr>\n"; for ($i = 0; $i < $recmax; $i++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . ($i + 1) . "</td>\n"; $body .= "<td>" . $col["name"] . "</td>\n"; $body .= "<td>" . $col["age"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <HTML><BODY> <?= $body ?> </BODY></HTML>

    • ベストアンサー
    • PHP
  • 入門書のPHPサンプル内で、MySQL関数を使いたい

    環境:PHP5.0.3+MySQL4.0.14です。PHPどころか、プログラムも素人です。 検索結果をHTML表に一覧化する仕組みを作っているのですが WHERE条件に合致した数値データを平均化したり、 WHERE条件合致した日付データの書式を【MySQL関数によって】加工したいです。 それぞれ、mysql.exe(DOS窓上)での書き方はわかったものの (SELECT AVG(HOGE1) WHERE (HOGE <= 1) のように)、 これをPHPに組み込んだ際ににどう使えばわからないです。 今回使っているPHP入門書のサンプルは以下の通りです。ここで mysql_fetch_arrayに格納されたテーブル(カラム)を取り出しているらしい ことはわかりますが、以下のサンプルで加工したい対象である $col["DATE1"]、$col["HOGE1"]を $col["date_format(DATE1, '%y/%m/%d')"] や $col["AVG(HOGE1)"]などと してもだめみたいです。 以下の例で、これらを取り出すにはどのように記述したらいいでしょうか。 よろしくお願い致します。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "結果: $recmax 件"; $body .= "<table>"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<td>" . $col["DATE1"] . "</td>"; $body .= "<td>" . $col["HOGE1"] . "</td>"; $body .= "</tr>"; } $body .= "</table>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html> <head></head> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • 検索結果の表示をもっと早くしたい

    次のように、200人の「MYID」諸氏に対応する登録年月(6桁)を リストアップしたところ、SQLを人数分解釈するためか、 表示までに異常に時間がかかってしまうのですが、 改善案をご教示いただけますと幸いです。 リストアップのイメージ (1001氏) 200409 200410 200411 (1002氏) 200501 200402   :(略) <?php $con = mysql_connect(SERV, USR, PASS); $selectdb = mysql_select_db(MYDV, $con); $numfrom = "1001"; $numto = "1200"; for ($i = $numfrom ; $i <= $numto; $i++) { $sql = "SELECT * FROM MYTABLE"; $sql .= "WHERE MYID = " . $i; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body .= "<table border='1'>\n"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . $col["YYMM"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table><br>\n"; } mysql_free_result($rst); $con = mysql_close($con); ?> <html><body> <?= $body ?> </body></html>

    • ベストアンサー
    • PHP
  • mysql_num_rowsなどのWarningの原因がわからない

    以下のプログラム、何が誤っているのでしょうか。 違う箇所で使ったPHPの使いまわし(そちらは問題なく動いている) なのですが、サーバー上で実行しても Warning: mysql_num_rows(): supplied argument is not a valid MySQL result ... Warning: mysql_free_result(): (以下同上) となり、どうしても原因が究明できません。。 以下、省略してますが、本質は変わりません。SQL文($sql)を phpMyAdminで通すとなんら問題なく問い合わせ結果が得られます。 <?php  $con = mysql_connect(localhost, username, pss);  $selectdb = mysql_select_db(mydb, $con);  $sql = "SELECT Kaisya FROM MYTABLE";  $rst = mysql_query($sql, $con);  $recmax = mysql_num_rows($rst);//■←この行がWarning■  $body = "<table border='1'>";  $body .= "<tr>";  $body .= "<td style=\"text-align: center;\">会社名</td>";  for ($recnum = 0; $recnum < $recmax; $recnum++) {   $col = mysql_fetch_array($rst);   $body .= "<tr>";   $body .= "<td>" . $col['Kaisya'] . "</td>";   $body .= "</tr>";  }  $body .= "</table>";  mysql_free_result($rst);//■←この行がWarning■  $con = mysql_close($con); ?> <html><head></head><body> <?= $body ?> </body></html>

    • ベストアンサー
    • PHP
  • DBからの値をリストアップするとき目印別にテーブルを組みたい

    ■ 環境 PHP 5.0.4 Win、MySQL mysql 4.0.14b Win ■知識レベル HTMLタグ打ち、初歩SQLは理解可、PHP他プログラミング知識なし 文末のソースで以下のようなリストを作ることはできたのですが: n冊みつかりました。 ―――――― 価格 書名 ―――――― 1000 ○○○ 2000 △△△   : ―――――― テーブルに含まれるpublisherというフィールドを目印に出版社別にテーブルを 組んで表示したいのですが、どのように書き換えたらよいでしょうか。 n冊みつかりました。出版社が n社 ありますので出版社別に分けて表示します。 ×社 ―――――― 価格 書名 ―――――― 1000 ○○   : ―――――― □出版 ―――――― 価格 書名 ―――――― 2000 △△   : ―――――― : <?php $con = mysql_connect(SERVER, USER, PASS); $selectdb = mysql_select_db(MYDB, $con); $sql = "select * from book"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body = "<B>$recmax 冊みつかりました。</B>"; $body .= "<TABLE> <TR> <TD>価格</TD> <TD>書名</TD> <TR>\n"; while($col = mysql_fetch_array($rst)) { $body .= "<TR>\n"; $body .= "<TD>" . $col["price"] . "</TD>\n"; $body .= "<TD>" . $col["title"] . "</TD>\n"; $body .= "</TR>\n"; } $body .= "</TABLE>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <HTML><BODY> <?= $body ?> </BODY></HTML>

    • ベストアンサー
    • PHP
  • Mysqlから取り出した名簿データの名前をクリックして詳細を表示したい。

    はじめまして。PHP・mysql共に初心者の者です。どなたかお知恵をお貸しください。以下に環境を記します。 Windows2000/sp5 Apache/2.0.55 PHP/5.0.5 MySQL 5.0 簡単な名簿のデータ(ID・名前・年齢・生年月日・住所・電話番号)をMysqlから取り出してブラウザで表示させるだけなんですが、全て表示させるまでは成功しました。 この表示をID・名前・年齢だけにして、名前をクリックすると、その人だけのID・名前・年齢・住所・電話番号が表示されるようにしたいのです。 まったく勉強不足で申し訳ないのですが、行き詰ってしまいました。 どなたか具体的なソースをご教授ください。よろしくお願いします。 以下に、全てのデータ表示のためのソースをさらします。 <?php $dbserver = "localhost"; $dbuser = "root"; $dbpassword = ""; $dbname = "meibo"; $con = mysql_connect($dbserver,$dbuser,$dbpassword); mysql_query("set names sjis"); $selectdb = mysql_select_db($dbname); $sql = "select id, name, age, bday, address, tel, curdate(), (year(curdate())-year(bday)) - (right(curdate(),5)<right(bday,5)) as age from meibo_1"; $rst = mysql_query($sql); $body = mysql_num_rows($rst) . "件のデータがあります。. <br><br>"; $body .= "<table border='1'> <tr> <th NOWRAP>ID</th> <th NOWRAP>氏名</th> <th NOWRAP>年齢</th> <th NOWRAP>生年月日</th> <th NOWRAP>住所</th> <th NOWRAP>電話番号</th>  </tr>"; while ($col = mysql_fetch_array($rst)) { $body .= "<nobr><tr>" . "<td NOWRAP>$col[id]</td>" . "<td NOWRAP>$col[name]</td>" . "<td NOWRAP>$col[age]</td>" . "<td NOWRAP>$col[bday]</td>" . "<td NOWRAP>$col[address]</td>" . "<td NOWRAP>$col[tel]</td>" . "</tr></nobr>"; } $body .= "</table>"; mysql_free_result($rst); $con = mysql_close($con); ?> <!doctype html public "-//w3c//dtd html 4.01 transitional//en"> <html> <head> </head> <body> <?=$body?> </body> </html>

    • ベストアンサー
    • PHP
  • forで書き出した値を条件付で合計したい

    PHPファイルで、以下のような成績表が出力されます。 ------------ 国語  算数 ------------ 89   NULL 90   78 NULL  45 60   99   :略 ------------- 150  177 ←こういう風に合計行を付けたしたいのですが、 事情があり、国語も算数も受験した者だけを合計したいのです。 for文とかmysql_fetch_arraytとか、使ってる関係で、 どういうにすればよいのかさっぱり見当つきません。 記述につき、アドバイスいただけますと幸いです。 <?php $con = mysql_connect(SERV, USR, PASS); $selectdb = mysql_select_db(MYDV, $con); $sql = "SELECT KOKUGO,SANSU FROM MYTABLE"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body .= "<table border='1'>\n"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "<tr>\n"; $body .= "<td>" . $col["KOKUGO"] . "</td>\n"; $body .= "<td>" . $col["SANSU"] . "</td>\n"; $body .= "</tr>\n"; } $body .= "</table><br>\n"; mysql_free_result($rst); $con = mysql_close($con); ?> <html><body> <?= $body ?> </body></html> ■ 環境 PHP 5.0.4 Win MySQL mysql 4.0.14b Win ■知識レベル: HTMLタグ打ち、初歩的なSQLを理解できる程度、PHP他プログラミング知識ほとんどなし

    • ベストアンサー
    • PHP
  • SQL1回で、平均と合計を両方出す方法はありますか?

    1回のSQL文発行で、同じフィールドに対し平均(AVG)と合計(SUM)を 両方算出することはできませんよね? 以下のようにすると、「第一列」が空白で出力されてしまいます。 $sql = "SELECT AVG(MYDATA) AS AVG_MYDATA, SUM(MYDATA) AS SUM_MYDATA FROM MYTABLE"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body = "<table border='1'>"; $body .= "<tr>"; $body .= "<td>" . $col["AVG_NYDATA"] . "</td>"; //第一列 $body .= "<td>" . $col["AVG_NYDATA"] . "</td>"; //第二列 $body .= "</tr>"; $body = "</table>"; 環境:MySQL 4.0.25

    • ベストアンサー
    • MySQL
  • リストから詳細画面に遷移するためのリンク作成と詳細画面の表示

    PHP5とMySQL4.0の組み合わせで、初歩的なことがわかりません。 例えば、(1)社員IDと、(2)年齢、(3)名前をリストアップする画面があるとして、 IDのところをハイパーリンクにして、それを押すとその社員の レコード内容を更新する画面を出す、みたいなことをしたいのですが、 これって method="POST" でなく、GETでやるのですよね? 「IDのリンク」とは、<a href="syain_detail.php?id=100">みたいなカタチに なるのでしょうが、具体的なスクリプトでご教示いただけないでしょうか。 単純に(IDへのリンクを考えずに)DBのレコードをPOSTでざーっと リストアップするHTMLまではできるのですが、 IDをハイパーリンクにして次の画面を構成するPHPがさっぱり わからないのです。下記、DBのサンプルと、わたしにわかるスクリプトです。 --------syainmaster---------- id   age  name ---------------------- 100   20   suzuki 200   24   sato 300   30   tanaka ----------------------- <?php   $con = mysql_connect(localhost, root, mypass);   $selectdb = mysql_select_db(mydb, $con);   $sql = "select * from syainmaster";   $rst = mysql_query($sql, $con);   $recmax = mysql_num_rows($rst);   $body = "<TABLE>";   for ($recnum = 0; $recnum < $recmax; $recnum++) {     $col = mysql_fetch_array($rst);     $body .= "<TR>";     $body .= "<TD>" . $col["id"] . "</TD>";     $body .= "<TD>" . $col["age"] . "</TD>";     $body .= "<TD>" . $col["name"] . "</TD>";     $body .= "</TR>";   }   $body .= "</TABLE>";   $con = mysql_close($con); ?> <HTML> <BODY> <?= $body ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • リスト上のcheckboxのON/OFF状態をうまくMySQLに格納したい

    次のような、3項目×100人分(100行)からなるシンプルな表があります。 (環境: MySQL5.0.37、PHP5.2.2) 左から、出席番号を表すテキストボックス(Readonly)、 宿題の提出の有無を表すチェックボックス、氏名です。 表の一番下に、登録ボタン(submit)があります。 ------------------------------- 出席番号 チェック  氏名 myNo   myCheck  myName ------------------------------- [  1]   [ ]     阿藤 ------------------------------- [  2]   [ ]     伊藤 ------------------------------- [  3]   [ ]     宇藤 ------------------------------- :(以降、100人続く) [チェック状態をDBに登録する] このチェックボックスのOn/Offの状況を、SQLのUpdate文で一括登録したいのですが、 うまくできません。 テキストボックスに記入された出席番号の配列($myNo[])には、count($myNo)と やると100があると返ってきます。 チェックボックスに記入された配列($myCheck[])は、チェックされた場合しか 配列に格納されないという特性があるようです。 何もチェックしないでSubmitボタンを押下した場合、count($myCheck)はゼロを 返してくるのです。 ですので、つい最近、全然別件で、同じような質問をして解決したばかりですが、 http://oshiete1.goo.ne.jp/qa5054417.html ここにある解法は通じないように思います。 以下のコメント部分、どのように記述すればうまくUpdate文を適用できるでしょうか? <?php $con = mysql_connect(localhost, username, userpw); $selectdb = mysql_select_db(dbname, $con); //■■■■■■■↓↓↓↓質問の本題:ここの部分をどう記述すればいいですか? if ($_POST["exec"] != "") { $sql = "update mytable set myCheck = ?????? where myNo = ??????"; mysql_query($sql, $con); } //■■■■■■■ここまで $sql = "select * from mytable"; $rst = mysql_query($sql, $con); $recmax = mysql_num_rows($rst); $body .= "<table border=\"1\">\n"; $body .= "\t<tr>\n"; $body .= "\t\t<th>出席番号</th>\n"; $body .= "\t\t<th>チェック</th>\n"; $body .= "\t\t<th>氏名</th>\n"; $body .= "\t</tr>\n"; for ($recnum = 0; $recnum < $recmax; $recnum++) { $col = mysql_fetch_array($rst); $body .= "\t<tr>\n"; $body .= "\t\t<td><input type=\"text\" name=\"myNo[]\" value=\"" . $col["myNo"] . "\" readonly></td>\n"; $value_myCheck = ""; if ($col["myCheck"] == '1') { $value_myCheck = " checked"; } $body .= "\t\t<td><input type=\"checkbox\" name=\"myCheck[]\" value=\"1\"" . $value_myCheck . "></td>\n"; $body .= "\t\t<td>" . $col["myName"] . "></td>\n"; $body .= "\t</tr>\n"; } $body .= "</table>\n"; ?> <html> <head></head> <body> <form method="post" action="<?php $_SERVER['PHP_SELF'] ?>"> <?= $body ?> <input type="submit" name="exec" value="チェック状態をDBに登録する"> </form> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう