MySQL内データを降順件数指定表示

このQ&Aのポイント
  • MySQL内のデータを降順で件数指定して表示しようとしていますが、うまくいきません。
  • var_dumpでチェックしても問題ないように思われるのですが、見落としているミスの箇所があると思われます。
  • 以下のコードを載せますので、アドバイスをいただけないでしょうか。
回答を見る
  • ベストアンサー

mysql内データを降順件数指定表示

タイトル通り、mysql内のデータを降順で件数指定して表示しようとしていますが、 どうしてもうまくいきません。 var_dumpでチェックしても問題ないように思われるのですが、うまくいかないということで見落としているミスの箇所があると思われるのですが、つまづいてしまいます。 以下にコードを載せますので、どなたかアドバイスをいただけないでしょうか。 <?php $debug = false; //DB 接続 $url = "localhost"; $user = "ユーザー名"; $pass = "パスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($_GET); mysql_set_charset('utf8'); //エラーチェック //リクエストメソッドチェック if($_SERVER["REQUEST_METHOD"] != "GET") { echo "Error: invalid method"; exit(); } //クエリ生成 $query = "SELECT * FROM shops ORDER BY id DESC limit 4"; $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>新着情報</title> </head> <body> <p>場所:<?php echo $row['area']; ?></p> <p>店名:<?php echo $row['name']; ?></p> </body> </html>

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

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

配列$rowには何もセットしていませんが、何が入っていると期待されていますか?mysql_queryのあとに(mysql_num_rowsはありますが)実際のデータの取得(mysql_fetch_arrayなど)が実行されていません。 http://jp2.php.net/manual/ja/function.mysql-fetch-array.php

lolololol
質問者

お礼

ご指摘ありがとうございます。 <?php while($row = mysql_fetch_assoc($result)): ?> ~~~ <?php endwhile; ?> が抜けていました。

関連するQ&A

  • phpでmysqlで作成したdbを表示したい。

    現在phpのプログラムの学習を行っています。、 phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。 参考書やサイトも参考にしたのですが、警告が出ています。 よくわからなくなってきましたので、教えていただきたいです。 ------------------------------------------------------------------------------- ・実行結果 Resource id #31Resource id #40 接続ID: 選択の成否: 結果ID: 行数: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45 ------------------------------------------------------------------------------- ・ソース <?php /*$con = mysql_connect('localhost','root','root') or die("接続できません"); print "接続に成功しました。"; mysql_close($con);*/ $url = "localhost"; $user = "root"; $pass = "***"; $db = "***"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM t01prefecture"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); echo "$link"; echo "$sdb"; echo "$result"; echo "$rows"; echo "<br>"; echo "接続ID:<?= $link ?><br />"; echo "選択の成否:<?= $sdb ?><br />"; echo "結果ID:<?= $result ?><br />"; echo "行数:<?= $rows ?><br />"; $recordSet = mysql_query('SELECT * FROM my_items'); while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */ echo $data['item_name']; /* ここの値を変える*/ echo '<br>'; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。");

    • ベストアンサー
    • PHP
  • PHP&MySQLのエラー(syntax)への対処

    PHPとMySQLを使った検索プログラムを作ってみているのですが、実際に動かしてみると、検索結果表示画面に以下のようなエラーがでます。 SELECT * FROM (テーブル名) where You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 いろいろとPHPに関するサイトやQ&Aを見て考えてみたのですが、解決策がわかりません。 アドバイス、ご指摘の程お願い戴けないでしょうか。 以下が検索結果表示のコードになります。 <body> <?php $debug = false; //DB Connect $url = "localhost"; $user = "ユーザー名"; $pass = "パスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($HTTP_POST_VARS); //Error Check //Request Method Check if($_SERVER["REQUEST_METHOD"] != "POST") { echo "Error: invalid method"; exit(); } //Create Query $query = "SELECT * FROM テーブル名"; //Create Search Criteria $where = array(); if (isset($_POST['type'])and($_POST['type'] !== '')) { $where[] = sprintf("(type='%s')", mysql_real_escape_string($_POST['type'])); } if (isset($_POST['name'])and($_POST['name'] !== '')) { $where[] = sprintf("(name='%s')", mysql_real_escape_string($_POST['name'])); } if (isset($_POST['address'])and($_POST['address'] !== '')) { $where[] = sprintf("(address like '%%%s%%')", mysql_real_escape_string($_POST['address'])); } if (isset($_POST['description'])and($_POST['description'] !== '')) { $where[] = sprintf("(description like '%%%s%%')", mysql_real_escape_string($_POST['description'])); } if (count($where <> 0)) { $query .= ' where ' . implode('and', $where); } //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <h2>Search Result</h2><br> <?php if($num_rows == 0) { $message = "No date"; } else { $message = $num_rows ."hits"; echo $message; } ?> <table> <tr> <td>Type</td> <td>Company</td> <td>Address</td> <td>Description of Business</td> </tr> <?php while($row = mysql_fetch_assoc($result)): ?> <tr> <td><?php echo $row['type']; ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['address']; ?></td> <td><?php echo $row['description']; ?></td> </tr> <?php endwhile; ?> </table> </body> 解決策をご指導よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • MYSQL、PHPを使ってのデータとそのデータ数表示について

    よろしくお願いいたします。 このようなテーブルを組んでいます。  game        maker  マリオ      任天堂  カービィ     任天堂  FF        スクエニ   ドラクエ     スクエニ  ソニック     セガ このテーブルを使って、  任天堂(2)  スクエニ(3)  セガ(1) というように、メーカーが作ったゲームの数がカッコ内ででるように、makerを並べたいと思っています。 これはどのように組んだらよいのでしょうか? ちなみに、今はこのように組んで、(もちろんですが)失敗しています。。 ---------------------------------------------------------------- <?php mysql_connect('***','***','***'); mysql_select_db('***'); $sql = "select * from test"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo $row["maker"]; echo "<br />"; } } ?> ---------------------------------------------------------------- 初歩的な質問で大変恐縮ですが、よろしくお願いいたします!

    • ベストアンサー
    • PHP
  • phpとmysqlが連携できない

    問題のコードです。 何度やっても失敗と表示されます。 接続は問題ないと思います。 お願いします。 $db = mysql_connect("localhost", "user", "user_パスワード", "db1") or die("Connection error"); $query = "select * from menbers"; $result = mysql_query($query, $db); if($result){ echo "成功"; }else{ echo "失敗"; }

  • ページング実装で2ページ目以降が全件表示してしまう

    検索システムの検索結果を分割表示する仕組みを作っているのですが、1ページ目は問題無く思った通りに表示されます。 しかし、2ページ目以降はすべて全件表示してしまいます。 「◯件中△件表示」というのは正常に動作しています。 いろいろ試行錯誤する中で、$queryの中身が2ページ目以降はwhere句等が外れてしまっているのが原因だということがわかりました。 じゃあ2ページ目以降にもきちんとそれらが反映されるように手直ししていこうということなのですが、どう対処していいかにつまづいています。 いろいろ情報を見ながら何度もチャレンジしているのですがうまくいきません。 2ページ目以降が全件表示ではなく検索結果として1ページ目の続きとして表示させるためにどうすればいいか、アドバイスをいただけないでしょうか。 よろしくお願い致します。 ※以下に今回の該当箇所のコードを記載します。 <?php $debug = false; //DB 接続 $url = "localhost"; $user = "DBユーザー名"; $pass = "DBパスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($_GET); mysql_set_charset('utf8'); //エラーチェック //リクエストメソッドチェック if($_SERVER["REQUEST_METHOD"] != "GET") { echo "Error: invalid method"; exit(); } define('NUM_SHOPS', 10); error_reporting(E_ALL & ~E_NOTICE); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } $offset = NUM_SHOPS * ($page - 1); //クエリ生成 $query = "SELECT * FROM テーブル名"; //検索条件抽出 $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; } if (count($where) <> 0) { $query .= "limit " . $offset . ", " . NUM_SHOPS; } //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); //検索結果件数カウント $query = "SELECT COUNT(id) FROM テーブル名"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC'; } $total = mysql_result(mysql_query($query), 0); $from = $offset + 1; $to = ($offset + NUM_SHOPS) < $total ? ($offset + NUM_SHOPS) : $total; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <!--検索結果表示画面始まり--> ~~~~~省略~~~~~ <!--検索結果表示画面終わり--> <!--以下、ページリンク--> <p> <?php if ($page > 1) : ?> <a href="?page=<?php echo $page - 1; ?>">前</a> <?php endif; ?> <?php for ($i = 1; $i <= ceil($total / NUM_SHOPS); $i++) : ?> <?php if ($page == $i) : ?> <strong><?php echo $i; ?></strong> <?php else : ?> <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php endif; ?> <?php endfor; ?> <?php if ($page < ceil($total / NUM_SHOPS)) : ?> <a href="?page=<?php echo $page + 1; ?>">次</a> <?php endif; ?> </p> </body> </html>

    • 締切済み
    • PHP
  • php、クエリ生成について

    OS:Mac OS X 10.6.8 Snow Leopard 環境:MAMPを使ったローカル環境 PHP:5.3.6 MySQL:5.5.9 PHPとMYyQLを使って検索システムを作ってみている者です。 検索結果がどうしても全件表示になってしまいます。 また、$queryにはSELECT * FROM テーブル名 にwhereで条件を付加してるのですが、 $queryをprintしてみても、SELECT * FROM テーブル名 しか表示されません。 いろいろ調べたり試したりしてみたのですが、原因がつかめず、解決策が見つかりません。 どうか、アドバイスご教示お願いします。 <body> <?php $debug = false; //DB Connect $url = "localhost"; $user = "ユーザー名"; $pass = "パスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($HTTP_POST_VARS); //Error Check //Request Method Check if($_SERVER["REQUEST_METHOD"] != "POST") { echo "Error: invalid method"; exit(); } //Create Query $query = "SELECT * FROM テーブル名"; //Create Search Criteria $where = array(); if (isset($_POST['type'])and($_POST['type'] !== '')) { $where[] = sprintf("(type='%s')", mysql_real_escape_string($_POST['type'])); } if (isset($_POST['name'])and($_POST['name'] !== '')) { $where[] = sprintf("(name='%s')", mysql_real_escape_string($_POST['name'])); } if (isset($_POST['address'])and($_POST['address'] !== '')) { $where[] = sprintf("(address like '%%%s%%')", mysql_real_escape_string($_POST['address'])); } if (isset($_POST['description'])and($_POST['description'] !== '')) { $where[] = sprintf("(description like '%%%s%%')", mysql_real_escape_string($_POST['description'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where); } echo $query; //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <h2>Search Result</h2><br> <?php if($num_rows == 0) { $message = "No date"; } else { $message = $num_rows ."hits"; echo $message; } ?> <table> <tr> <td>Type</td> <td>Company</td> <td>Address</td> <td>Description of Business</td> </tr> <?php while($row = mysql_fetch_assoc($result)): ?> <tr> <td><?php echo $row['type']; ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['address']; ?></td> <td><?php echo $row['description']; ?></td> </tr> <?php endwhile; ?> </table> </body>

    • ベストアンサー
    • PHP
  • PHPについて。

    PHPで占いを作っているのですが、ランダム表示にするにはどうすればいいですか。 <html> <head> <title>入力フォーム</title> </head> <body> <center> <?php //接続 $link = mysql_connect("○○○","○○○","○○○"); if(!$link){ die('Connected error !'.mysql_error()); } //DB選択 $db_selected = mysql_select_db('○○', $link); if(!$db_selected){ die('Connected error !'.mysql_error()); } //フォーム入力文字を表現 $○○= $_POST['name']; /* echo $○○.'<br>'; */ //ハッシュ値の取得 $hash = crc32($○○); if($hash < 0){ $hash = 0 - $hash; } /* echo $hash; */ $result = mysql_query("SELECT ○○") or die("sql error !"); $retukazu = mysql_num_rows($result); $kekka = $hash % $retukazu + 1; //文字コード設定 mysql_query("SET NAMES sjis"); $sql = mysql_query("SELECT ○○ = $kekka"); if(!$sql){ die('query_error !'.mysql_error()); } while($row = mysql_fetch_assoc($sql)){ echo '<center><br />あなたはきっと・・・<br /><br /><font color= "Red"><strong>'.$row['Memo'].'</strong></font>です<br />'; } ?> </p> </body> </html>

    • ベストアンサー
    • PHP
  • PHPとMySQLで配列で検索する方法

    プログラミング初心者です。 PHPとMySQLでデータベースを作成しています。 配列に格納したデータを既に登録してあるデータに参照して、日付と題名が同じものは登録しないようにしたいと思います。 以下がソースなのですが、2行目でエラーがでてしまいます。そうすればよいかご教授お願いします。 for($j=1; $j<$i; $j++){ $query ="select * from data where date=" . $date2[$j]; $result = mysql_query($query) or die(mysql_error()); $query2 ="select * from data where sub=" . $sub[$j]; $result2 = mysql_query($query2) or die(mysql_error()); if(mysql_num_rows($result) != 0 && mysql_num_rows($result2) != 0){ //登録しない } else{      //データベースに登録

    • 締切済み
    • PHP
  • PHP+MySQLで文字化けします

    PHPでMySQLに接続して以下のように テーブルの作成・そのテーブルにInsertをすると文字化けします。 PHPサーバーの文字コードはEUC-JP、MySQLの文字コードはlatin1です。 PHPのバージョンは5.04でMySQLのバージョンは4.1.20です。 無料レンタルサーバーなので詳細な設定は変更できません。 <?php // データベースに接続し、選択する mb_language('Japanese'); mb_internal_encoding('UTF-8'); mb_http_output('UTF-8'); $link = mysql_connect('localhost',"user","password") or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; mysql_select_db('user') or die('Could not select database'); mysql_query("SET NAMES UTF-8",$link); // SQL クエリを実行する $name = 'test'; $query = "CREATE TABLE IF NOT EXISTS `$name` ( `id` varchar(50) primary key, `name` varchar(50), `pw` varchar(50) );"; $result = mysql_query($query) or die('Query failed: ' . mysql_error()); $query = "INSERT INTO $name (id, name) VALUES('test', 'テスト');"; $mojicode = mb_detect_encoding($query); $query = mb_convert_encoding($query, "UTF-8", "$mojicode"); $result = mysql_query($query) or die('Query failed: ' . mysql_error()); // HTML に結果を出力する echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; // 結果セットを開放する mysql_free_result($result); // 接続を閉じる mysql_close($link); ?> まだまだPHP、MySQL共に技術が未熟なため 説明不足な部分が多々あるかと思いますがご教授お願いします。

    • ベストアンサー
    • PHP
  • MYSQL、PHP. データが入っていない個所を非表示にする方法

    よろしくお願いいたします。 現在、MYSQLとPHPを使ってゲームのデータベースのサイトを作っています。 ゲームのキャラクターなどを登録してあるのですが、キャラクター登録のないゲームのページもあります。 そういうとき、キャラクターがあるときには、 例 ================================================================ FF7に登場するキャラクター ================================================================ ・クラウド ・セフィロス ・コルネオ ・・・ というように出して、データ登録がない場合は(ここでいうと帯ごと)表示させないようにするにはどのようにしたらよいのでしょうか? ifを使うというのは何となく予想しているのですが、実際どのように組んだらよいものかさっぱりわからずに。。 ちなみに、現在の僕のサイトの該当箇所はこのように組んであります。(少し簡略化させていただきました) echo "<h3><div id =midashi>$○○ に登場するキャラクター</div></h3>"; $sql= "select * from game; $result = mysql_query($sql); $rows = mysql_num_rows($result); while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row3["chara"]; echo "</p>"; } 何か説明が足りない個所などございましたらがんがんおっしゃってください。 よろしくお願いいたします!

    • ベストアンサー
    • PHP