• ベストアンサー

もっとも新しいレコードから検索する方法

MySQLにデータを登録しており、PHPにてWebサイトにデータを表示しています。SQLはSELECT * FROM TABLE WHERE .... なんですが、この場合一番初めのレコードから順に表示されてしまうため、古いデータがはじめに、新しいデータが最後尾に表示されてしまいます。 これを解消するため最後尾のレコードから検索するにはどうしたらよいのでしょうか?又、カテゴリが異なってしまいますが、PHPでもっとよい方法などございましたらお願いします。

  • MySQL
  • 回答数6
  • ありがとう数5

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

  • ベストアンサー
回答No.2

>一番初めのレコードから順に表示されてしまうため、古いデータがはじめに、新しいデータが最後尾に表示 RDBMSとしては、ORDER BYを指定しない場合の検索順序は保証されません。 格納日時を入れる列を表に持たせ、検索時にその列の値の降順に検索すればいいだけでは? SELECT * FROM TABLE WHERE .... ORDER BY 日時 DESC

itmedia_search
質問者

お礼

回答ありがとうございます。 ORDER BY~を2つ以上指定するにはどのようなSQL文にすればよいのでしょうか?実はすでにORDER BY~はすでにあり AND で仕切ってもエラーが出てしまいました。 よろしくお願いします。

その他の回答 (5)

回答No.6

こんなデタラメなSQLは、どうやったら思いつくのでしょうね。。。 SELECT * FROM TABLE →表名は「TABLE」?  予約語って、知ってますか?  もし指定するなら、`TABLE`と指定しましょう。  英単語を表名や列名に指定すると、予約語とぶつかってしまう場合が少なくありません。 RDBMSに予約語と解釈されると、思わぬ構文エラーになります。 その場合、「`」または「"」で囲むことで、名称として使用できます。 → WHERE okwave = 'hoge' , ORDER BY what DESC ,  WHERE~とORDER BY~の間に、カンマは指定できません。 →ORDER BY what DESC , ORDER BY something ORDER BYで二つ以上の列を指定する場合は、 ORDER BY C1,C2 と列名を並べます。 →LIMIT "26", 10  なぜ数字を「"」で囲むのでしょう? 以上を訂正すると、以下のようになります。 SELECT * FROM `TABLE` WHERE okwave = 'hoge' ORDER BY what DESC , something LIMIT 26, 10;

itmedia_search
質問者

お礼

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

  • taskuni
  • ベストアンサー率71% (49/69)
回答No.5

ORDER BY節でカラム2つ以上指定されている時、 どのようにカンマで区切られているのか、見てみましたか? >ORDER BY what DESC , ORDER BY something このような書き方はされていないはずです。

itmedia_search
質問者

補足

回答ありがとうございます。http://dev.mysql.com/doc/refman/4.1/ja/order-by-optimisation.htmlを見て以下のSQLで試してみましたがやはりだめでした。 ORDER BY what DESC,somethig LIMIT... ん~SQLって難しいのですね。できれば答えを教えていただくとありがたいです。

  • taskuni
  • ベストアンサー率71% (49/69)
回答No.4

もう十分に答えは出ていると思います。 いろいろ調べたり試してみましたか?

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/select.html
itmedia_search
質問者

お礼

回答ありがとうございます。 ローカルの環境にて何回も試しましたがエラーが出てしまいました。又、MySQLの公式サイトで調べたり、手持ちのリファレンスブックなどを手にとって調べていますが、エラーが出てしまいます。 よろしくお願いします。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

>ORDER BY~を2つ以上指定するにはどのようなSQL文にすればよいのでしょうか? カンマで区切る。

itmedia_search
質問者

補足

回答ありがとうございました。 教えていたあきましたとおりカンマで仕切りましたがエラーが出てしまいます。 SQLは以下の通りです。 SELECT * FROM TABLE WHERE okwave = 'hoge' , ORDER BY what DESC , ORDER BY something LIMIT "26", 10; よろしくお願いします。

  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

あんまりPHPは詳しくないんですが・・(^^; 参考URLのやり方が参考になりませんか?

参考URL:
http://php.s3.to/man/function.mysql-data-seek.html

関連するQ&A

  • 2つのテーブルからレコードを抽出する方法

    お世話になります。MySQLに関する質問です。 TABLE1とTABLE2の2つのテーブルからレコードを抽出する際、 TABLE1からは全項目のデータを取得し、TABLE2からは一部の項目の データを取得したいと考えています。 条件は、TABLE1とTABLE2を[No]という項目の値で紐(ひも)づけます。 (1) SELECT * FROM TABLE1 (2) SELECT COL_A, COL_B, COL_C FROM TABLE2 上記(1)(2)のレコードを1つのSQLで取得する方法について、どなたかご教授願えますか?

    • ベストアンサー
    • MySQL
  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PDOのデータ取得方法について

    お世話になります。 以前まで「mysql_query」でSQLを実行していたのをPDOで行うように変更しております。 prepareの「?」の部分までのSQLにした場合(1)、データ取得出来ますが (2)ですとエラーも返ってこなくデータ取得出来ません。 色々と試してはいますが、全く出来なくて大変困っています。どうかご教示くださいませ。 1)SELECT * FROM table WHERE data_code = ? and data_code2 = ? 2)SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null or data_code3 = "") ※PHP5.3、MySQL5.0です。

    • 締切済み
    • PHP
  • 効率の良い検索方法が分かりません。

    タイトルではうまく説明できなかったのですが、やりたいことは以下のようなことです。 まず、以下のような構成のテーブルが3つあります。 ■table1 aid, a_title 1 , あああ 2 , いいい 3 , ううう 4 , えええ ■table2 bid, b_title 1 , xxxx 2 , yyyy 3 , zzzz ■table3 (table1と、table2の組み合わせ) aid, bid 1 , 1 1 , 2 2 , 2 2 , 3 3 , 2 3 , 3 4 , 1 そして、ここから、 table1の、aid=1 のデータと、aid=1が持つ、table2の、bid=1,2 といったデータを調べたり、 table2の、bid=2 のデータと、bid=2が持つ、table1の、aid=1,2,3 といったデータを調べたいと思ってます。 これを、MySQL内で効率よく調べる方法が分かりません。 PHPとMySQLでシステムを組んでいるのですが、一度MySQL側で、 SELECT * FROM `table1` として、それをPHP側のforループで、各aid毎に、 SELECT * FROM `table2`,`table3` WHERE table2.bid = table3.bid AND table3.aid = $aid 等とするしかないでしょうか? あとは、テーブルを3つ使わずに、table1に、bid_list のような列を作って、そこに、"1,2"等というふうに、どのbidと関係するのかをコンマ区切りでのストリングで書いておいて、PHP側で配列にするというのも考えたのですが、この方法だと、bid=xxx を含む、table1のデータを引き出すのが困難になりそうなので、辞めようと思っています。 MySQLのバージョンは、3.23です。

    • ベストアンサー
    • MySQL
  • 該当レコードなしでエラーを発生させない方法

    レコードなし、もしくは該当レコードなしでエラーを発生させない方法を教えてください データベース初心者です レコードなしもしくは該当レコードなしの状態で検索を行うとエラーが発生します。 エラーを発生させずに検索を行う方法があれば教えてください。 MySQL 5.0.67 レコードは下記のようになります。 desc table; +----------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+-------+ | val1 | smallint(6) | NO | PRI | 0 | | | val2 | smallint(6) | NO | PRI | 0 | | | val3 | smallint(6) | NO | PRI | 0 | | | date_y | char(4) | NO | PRI | | | | date_m | char(2) | NO | PRI | | | | pre | bigint(19) | NO | | 0 | | | now | bigint(19) | NO | | 0 | | +----------+----------------------+------+-----+---------+-------+ 下記のSQL文で検索を行いました。 SELECT t.date_y, t.date_m FROM table t, ( SELECT date_y,max(date_m*1) as date_m FROM table WHERE date_y= ( SELECT max(date_y*1) as date_y FROM table WHERE (now - pre) > 0 ) ) s WHERE t.date_y=s.date_y and t.date_m=s.date_m; レコードなし、もしくは該当レコードがないとWHERE文のdata_yにnullが代入され、 本SQL文でエラーが発生します。 いろいろ調べて「EXISTS」「NOT EXISTS」「NULLIF」を利用するのかな? と思ったのだけど、下記URLを参照しても、うまくSQL文が書けませんでしたので、ご教授頂ければ幸いです。 6.4.2.6. EXISTS と NOT EXISTS http://dev.mysql.com/doc/refman/4.1/ja/exists-and-not-exists-subque... 6.3.1.4. フロー制御関数 http://dev.mysql.com/doc/refman/4.1/ja/control-flow-functions.html

    • ベストアンサー
    • MySQL
  • PHP,MYSQLで特定例を表示する場合、

    PHP、MYSQLで特定例を表示する場合のsql文が分かりません。 データーベースmeibo no | name | sex | age | 1 | 一郎 | 男 | 20 | 2 | 一子 | 女 | 22 | 3 | 二郎 | 男 | 25 | 4 | 二子 | 女 | 27 | 女のみを表示したい場合を考え以下のようなコードを作りましたが上手くいきません。 <?php //データーベース接続 require_once('../require/dbcon.php'); //件数の表示 $recordSet = mysql_query('SELECT COUNT(sex) AS record_count FROM meibo WHERE sex(女)'); $data = mysql_fetch_assoc($recordSet); echo '<b>','※ 女性メンバー','</b> ('.$data['record_count'].' 人のデーターがあります。)<br /><br />'; //テーブルセット $recordSet = mysql_query('SELECT sex FROM meibo WHERE sex(女)'); while ($table = mysql_fetch_assoc($recordSet)) { echo $table['no']; echo $table['name']; echo $table['age']; } エラーでは $data = mysql_fetch_assoc($recordSet); と、 while ($table = mysql_fetch_assoc($recordSet)) のラインが出るのですが 何が悪いのか良く分かりません。 私の考えではsql文が悪いのではないかと思うのですが、どなたかお教えくださいませ。

    • ベストアンサー
    • PHP
  • PHPで、配列に値をうまく入れれません。

    PHP初心者です。 PHP、Mysqlを使い、検索サイトを作ろうとしています。 チェックボックスでチェックされた値を、一覧.phpに送り、 if(チェックされた値) { $sql1 = select * from table where like '%検索%'; } $sql1の結果を配列に入れて、そのidで以下のように絞込をしたいのですが・・・ $sql2 = select * from table id = $sql1(ここで例えば2,5,7とかって入ってほしい); ググってfetchやらなんやら試したのですが、2,5,7がはいってたとしたら、最後の7だけしか取り出せなかったりと苦戦しています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • XAMPPのMySQLで削除済みレコードが表示される

    XAMPPのMySQLで削除済みレコードが表示される XAMPP1.7.3をWinXP Proにて運用しています。 PHPにてselectのSQLを実行したところ、削除済みのレコードが表示されるため困っています。 これまでの経緯は 1.phpMyAdminにてDBとテーブルを作成し、サンプルデータを4件登録 2.PHPからselectで条件なしで全レコードが表示されるのを確認 3.条件をつけてselectし、それぞれの条件にマッチしたレコードが表示されるのを確認 4.phpMyAdminにて1レコードを削除 5.条件をつけてselectし、削除したレコードが表示されるのを発見 6.phpMyAdminのSQLで同じ条件のSQLを実行し、削除レコードが表示されないのを確認 7.PHP側のselect後にDBCloseをしているかの確認 8.phpMyAdminにてテーブルの修復、最適化などを実行 9.MySQLの再起動 以上の操作をしてみましたが、やはりPHPからのSQLの結果に削除されたレコードが表示されてしまいます。 色々なサイトで同じような現象のTipsがないか探しましたが、見つけきれず質問させていただきます。 同じような現象に対しての対応を紹介したサイトや、対処方法をご教授下さい。 よろしくお願いします。

  • MySQLのレコードを検索、検索結果を保持したまま並び替えしたいのですが・・・

    PHP4 MySQL4 経験値1ヶ月くらいのビギナーです。 PHP+MySQLで会員DBを構築し、やっと検索をかけて思惑の通り一覧が表示されるようになり感激していたのもつかの間・・・ この1週間『並び替え』という新たな壁にぶつかり身もだえしております。 ベテランの皆さま!どうか!どうか、お知恵を!救いの手をお貸しくださいませ!! 【 現状です 】 ■会員テーブル:member ■id:int ■name:vachar ■age:int ■addr:varchar レコード数200くらい 【 したいこと 】 例えば年齢を20~30で検索します。 50くらいのレコードが絞られて表示されます。 このときはidの順番に一旦並んでいます。 それから年齢の若い順、高齢の順に並び替えたいのですが・・・どうしたいいでしょうか? 【 やってみたこと 】 プルダウンを設置して、javascriptで選択した時点でURLを移動させて(違うファイルではなくそのファイルに)その際、GETで数値を持っていってもらって おんなじファイル(一覧表示のPHPファイル)にリンクさせて、そのGET値を受け取って、反映して・・・と文章にすると良くわからんことを思いついてして 見ました。 全てのレコードが表示されているときはうまく行きました・・・が、検索した結果の状態で並び替えると、検索した結果の50件の中での並び替えが できず、並び替えを実行すると全てのレコードが表示されてしまいます。 検索して、「絞り込まれた状態(ここでは50件のこと)」でそのレコードたちだけを並び替えさせたいのです。 【 こんなコードなんです 】 一覧表示のPHPファイル:ichiran.php <? $db = mysql_connect("localhost","××××","××××"); mysql_select_db("member"); $query = "SET NAMES utf8"; // 検索ページから年齢の下限を取得 $low_age= $_POST["low_age"]; // 検索ページから年齢の上限を取得 $high_age= $_POST["high_age"]; // 並び替えの時、 $order_age= $_GET["order_age"]; // 取得した検索結果からSQL文に変換(下限) if($low_age != ""){ $where_low_age = "age >= '$low_age'"; } else { $where_low_age = ""; } // 取得した検索結果からSQL文に変換(上限) if($high_age != ""){ $where_high_age = "age <= '$high_age'"; } else { $where_high_age = ""; // 取得した並び替えGETをSQL文に変換 switch ($order_age){ case 1: $sql_order = " order by age "; break; case 2: $sql_order = " order by age desc ; break; default: $sql_order = " order by id "; } // SQL文に変換 $query = "select * from member where ".$where_low_age." and ".$where_high_age.$sql_order; $result = mysql_query($query); </html> <body> <head> <!-- 並び替え --> <script type="text/javascript"> function change(myURI){ if(myURI !="default"){ window.document.location.href=myURI; } } </script> <!-- 並び替え --> </head> <!-- 一覧表示 --> while( $row = mysql_fetch_array($result) ) { echo $row["age"]."<br>"; } <!-- 並び替え実行部分 --> <form name="sampleForm1" id="sampleForm1"> <select name="selectMenu1" id="selectMenu1" onchange="change(this.form.selectMenu1.value);"> <option value="default" selected="selected">年齢並び替え</option> <option value="ichiran.php?order_age=1">若い順</option> <option value="ichiran.php?order_age=2">高齢の順</option> </select> </form> </body> </html> <? mysql_close($db); ?> 分かりにくい説明ですが、どうぞどうぞ皆さまよろしくお願い致します!!

    • ベストアンサー
    • PHP
  • テーブルの最後(最新)のレコードを抽出したい

    宜しくお願いします。 PHP MYSQL の組み合わせで使っています 以下のようにして、最後のレコードを取り出したいのですが まったく違う事をしているのかもしれません。 $sql =" select * from テーブル where フィールド='max' " ; フィールドはauto_incrementで番号を振っています。 これで最大のつもりなのですが・・・。 他にも、レコードを入れた時間も記録したフィールドがあるのですが どうしてよいか?判りません。 テーブルの最新のレコードを出したいのです。 **その中の一つのフィールドを取り出すのですが、   それはうまくいっているみたいです    (max の所に数字を入れると表示します) お手数かけますが、どなたかご教授お願いいたします。

    • ベストアンサー
    • MySQL