• ベストアンサー

[PHP+MySQL] データをランダムに表示する方法について(order by)

ID ・ 名前 ・ 都道府県名 ・ エリア名 ・ TEL というデータがあります。 表示順序(order by)ですが、都道府県名・エリア名の順で表示させたいのですが、 その次の順序条件をランダムに表示したいのです。 つまり、都道府県名・エリア名が同じデータの場合に、決まった順序ではなく、ランダムにすることによって、公平な順序条件で表示したいのです。 (誰もが上に表示されたいと思っています。なので、ランダムにすることによって、公平になるのではないかと考えました。ランダム表示以外にも、良い案があれば教えて頂きたいです。) どなたか、良い方法があれば、ご指南頂ければ有難いです。宜しくお願い致します。 <?php require_once("../***.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from YTABLE order by ken, area, ★"; $rst = mysql_query($sql, $con); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title></title> </head> <body> <table border="1" cellspacing="0" cellpadding="10"> <?php while($col = mysql_fetch_array($rst)) { ?> <tr> <td><?php echo $col["name"]; ?></a></td> <td><?php echo $col["ken"]; ?></a></td> <td><?php echo $col["area"]; ?></a></td> <td><?php echo $col["tel"]; ?></a></td> </tr> <?php } ?> </table> </body> </html> <?php mysql_free_result($rst); $con = mysql_close($con); ?>

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

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

order by ken, area, rand()"; じゃだめ?

wdwdwd
質問者

お礼

ありがとうございました。 rand関数を知りませんでした。 これで、やって見たいと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • qaaaq
  • ベストアンサー率10% (2/19)
回答No.1

一つのアイディアとして、3番目のソートの条件を id DESC id ASC 名前 DESC 名前 ASC 電話番号 DESC 電話番号 ASC と6通り考えられますがこれをランダムにsqlに追加するロジックを加えれば少しはランダムになりますよね、 さらに組み合わせを取ればかなり乱数チックになると思いますよ

wdwdwd
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

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

    • ベストアンサー
    • 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
  • PHP、mysql、html 表のセル内の文字列の長さによってセル幅が変わる。

    こんばんは。PHP・mysql共に初心者の者です。どなたかお知恵をお貸しください。以下に環境を記します。 Windows2000/sp5 Apache/2.0.55 PHP/5.0.5 MySQL 5.0 mysqlから取り出したレコードを<table>で表形式にて表示する物を作っておりますが、ヘッダ部と表示部を別々に<table>タグで囲んであるせいか、セルの大きさの整合性が取れなくなりました。 表示部では、データの文字列の長さによってそれぞれのセルの大きさが違っている状態です。ヘッダ部と表示部をまとめて<table>タグで囲んだり等、色々と試行錯誤しましたが、行き詰まりました。何か良いアイデアはないものでしょうか? 長くなりますのでwhile文からのソースを晒します。 while ($col = mysql_fetch_array($rst)) { $body .=<<<eof <table> <tr> <td NOWRAP><input type="checkbox" name="chk[]" value="{$col["id2"]}"></td> <td NOWRAP>{$col["id"]}</td> <td NOWRAP><a href='/meibo_view.php?id={$col["id"]}'>$col[name]</a></td> <td NOWRAP>{$col["age"]}</td> </tr> </table> eof; } $body = <<<eof <table> <tr> <th NOWRAP>詳細</th> <th NOWRAP>ID</th> <th NOWRAP>氏名</th> <th NOWRAP>年齢</th> </tr> {$body} </table> eof; mysql_free_result($rst); $con = mysql_close($con); ?>

    • 締切済み
    • 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
  • PHPでのMYSQL接続のデータ表示

    PHPのバージョンは4.2.3です。 index.php という一覧表示画面から 一意なKey文字列を受け取りそのデータに合致する データの詳細を表示する画面です。 実データ部分が表示されず困っています。 実行時のPHPのエラーも出力されないので いまいちどこが悪いのかわかりません アドバイスよろしくお願いします。 <?php require_once( "common.php" ); require_once( "const.php" ); if(! $conn = mysql_connect( 'ホスト名','ユーザー名','PASS')){ die( 'MYSQL接続失敗'); } $sql = ""; $sql .= "select * from LIVE "; $sql .= "ORDER BY Date DESC "; $sql .= "WHERE ID=".$_REQUEST[ "KEY" ]; echo $sql; mysql_select_db("DB名",$conn); $rs = mysql_query($sql, $conn); $DATE=$rs['DATE']; $TITLE=$rs['TITLE']; $PLACE=$rs['PLACE']; $ARTIST=$rs['ARTIST']; echo $DATE; echo $TITLE; echo $PLACE; echo $ARTIST; //$rec = mysql_fetch_array( $rs, MYSQL_ASSOC ); ?> <HTML> <HEAD><TITLE>ライブ予定</TITLE></HEAD> <BODY><H1 ALIGN="CENTER">ライブ予定詳細</H1> <A HREF="./">戻る</A> <TABLE BORDER="1" ALIGN="CENTER" WIDTH="100%"> <TR><TD BGCOLOR="#FFFFCC">日付</TD> <TD><?php HESC($rec['DATE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">タイトル</TD> <TD><?php HESC($rec['TITLE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">場所</TD> <TD><?php HESC($rec['PLACE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">アーティスト</TD> <TD><?php HESC($rec['ARTIST']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">本文</TD> <TD></TD></TR> </TABLE> </BODY></HTML>

    • ベストアンサー
    • PHP
  • PHP+MYSQLでレコードの表示させ方

    いつも初心者の質問でスミマセン。 PHP MYSQL で 会員制ページを作っています。 このような時にはどういう風にしたらいいか教えてください。 1件のレコードに 名前 出身県 性別 がある時に 下記のようにその個人のページにリンクしたいのですが ひとつの県だけなら出来るのですが、 このように条件を色々と設定するにはどうしたらいいか ヒントだけでもお願いいたします。 沖縄県出身者 男 A B C 女 D E F 東京出身者 男 G H I 女 J K L このようにしていました。 <?php require_once("dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD); $selectdb = mysql_select_db($DBNAME, $con); $sql = "select * from mem where seibetu = 1 and area = 1 " ; $rst = mysql_query($sql, $con); $body1 .= ""; while($col = mysql_fetch_array($rst)) { $body1 .= "⇒" . "<A href='" . $col["id"] . "j.html'>" . $col["name"] . "</A>"; $body1 .= "<br>\n"; } mysql_free_result($rst); $con = mysql_close($con); ?> これでボディに<?= $body1 ?> を張っていました。 これを<?= $body2 ?> と繰り返したらいいのかと思い色々していましたが どうしてもうまくいきません。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • MySQLでデータ表示

    MySQLでデータの表示を行っています 10件ずつ表示し、11件からは2ページ目に表示したいです サイトや本を見ながらデータ表示と次の10件のリンクは表示されるよう自力で頑張ったのですが 次の10件を押してもデータが変わらず1件目から10件目のままです どこが違うか教えてもらえますか。 どうコードを入力するか教えてくれたらありがたいです 一覧 ta2.phpです <html> <body> <form action = "ta2.php" method="GET"> <input type="hidden" name="page" value="0"> </form> <?php //データベースに接続 if (!$con = mysql_connect("localhost", "root", "admin")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("db_test", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select * from tbl_test" ; $sql.= " limit " . $page*10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr>"; while($row = mysql_fetch_array($res)) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr> <td>$ID</td> <td>$NAME</td> <td>$ADDR</td> <td><a href='edit.php?番号=$ID'>修正</a> <a href='delete.php?番号=$ID'>削除</a></td></tr>"; header('content-type: text/html; charset="utf-8"'); if ($_GET) { // データがGETされていたら $page = isset($_GET['page']) ? $_GET['page'] : ''; // 取得 } } $sql = "select count(*) from tbl_test " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page + 1, "ページ目を表示<br>" ; //前の10件 if ($page != 0) { echo "<a href = ta2.php?page= $page>" ; echo "&lt 前の10件" ; } //次の10件 if (($page + 1)*10 < $cnt) { echo "<a href = ta2.php?page= $page>" ; echo " 次の10件 " ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </table> </body> </html>

    • ベストアンサー
    • MySQL
  • select文

    こんばんは。PHPでデータベースからレコードとフィールドを表として取り出そうとしてますが、うまく行きません。 MySQLへの接続はうまくいってると思うので、while文が間違ってるのでしょうか?PHPのバージョンはPHP Version 4.4.2です。 よろしくお願いしますm(__)m <?php require_once("dbini.php"); $con = mysql_connect($server, $user, $pass); $select = mysql_select_db($dbname, $con); $sql = "select * from book"; $rst = mysql_query($sql, $con); $body = "<table border='0' cellpadding='5' cellspacing='5' width='500'><tr><td>\n"; while($col = mysql_fetch_array($rst)) { $body .= "<b><font size='+2'>".$col["title"]."</font></b>" $body .= "</td></tr>"; $body .= "<tr><td colspan='2'>".$col["article"]."</td></tr></table>"; } mysql_free_result($rst); $con = mysql_close($con); ?> <html> <body> <?= $body ?> </body> </html>

    • ベストアンサー
    • PHP
  • テーブルの最後のレコードしか表示されない

    すごく初歩的な質問だと思い申し訳ないのですがご教授下さい。 タイトル通り、テーブルの最後のレコードしか表示されないのです。 この前までは全て表示できていたのですが、 どこをどういじったのか、このようなことになってしまいました。 itemというテーブルには53個登録があり、53番目のものしか表示されません… $sql = "select * from item order by id"; $rst = mysql_query($sql, $con); while($col = mysql_fetch_array($rst)) { $dbt = "<tr bgcolor='#FFFFFF'> <td align='center'><a href='use.php?key=".$col["name"]."'>".$col["name"]."</a></td> <td align='center'>".$col["name1"]."</td> <td align='center'>".$col["name2"]."</td> <td align='center'>".$col["name3"]."</td> <td align='center'>".$col["name4"]."</td> <td>".nl2br($col["name5"])."</td> <td align='center'>".$col["name6"]."</td> </tr>"; } mysql_free_result($rst); $con = mysql_close($con); それと、もう一つ解決したいことがあるのですが、 <a href='use.php?key=".$col["name"]."'>".$col["name"]."</a> のようにアンカーを張り、次のページに変数を渡す方法で、use.php?key=*****のように、表示させないことは可能でしょうか? 見た目にも悪いですし、セキュリティ上も好ましくないかと思いまして方法があればと思いました。

    • ベストアンサー
    • MySQL
  • PHPでMySQLにデーターを追加するところで壁に当たってしまいました

    PHPでMySQLにデーターを追加するところで壁に当たってしまいました。 PHP5.3&MYSQL5.1 1.フォームへ入力 2.確認画面 3.MySQLへデーター追加 1.form <html> <head><title></title></head> <body> <form method="post" action="conf.php"> <table> <tr><th>番号</th><td><input type="text" name="id" /></td></tr> <tr><th>タイトル</th><td><input type="text" name="title" /></td></tr> <tr><th>テキスト</th><td><textarea name="cont" cols="40" rows="5" /></textarea></tr> <tr><th>日付け</th><td><input type="text" name="update" size="10" /></td></tr> </table> <input type="submit" value="送信" /><input type="reset" value="リセット" /> </form> </body> </html> 2.確認画面 <html> <head><title></title></head> <body> <table> <tr><th>番号</th><td><?php echo htmlspecialchars($_POST["id"]) ?></td></tr> <tr><th>タイトル</th><td><?php echo htmlspecialchars($_POST["title"]) ?></td></tr> <tr><th>テキスト</th><td><?php echo htmlspecialchars($_POST["cont"]) ?></td></tr> <tr><th>日付け</th><td><?php echo htmlspecialchars($_POST["update"]) ?></td></tr> </table> <form method="post" action="upld.php"> <input type="hidden" name="did" value="<?php echo htmlspecialchars($_POST["id"]) ?>" /> <input type="hidden" name="title" value="<?php echo htmlspecialchars($_POST["title"]) ?>" /> <input type="hidden" name="cont" value="<?php echo htmlspecialchars($_POST["cont"]) ?>" /> <input type="hidden" name="update" value="<?php echo htmlspecialchars($_POST["update"]) ?>" /> <input type="submit" value="登録" /> </form> </body> </html> 3.MySQLへデーター追加 <?php $Con = mysql_connect("localhost","root",""); if ($Con == false) {dir ("MySQLの接続に失敗。");} if (!mysql_select_db("phpdata",$Con)) {dir ("データーベース接続に失敗。");} $sql = "insert into daimoku(id,title,cont,update) values('".$_POST["id"]."','".$_POST["title"]."','".$_POST["cont"]."','".$_POST["update"]."')";//SQL文の作成 $res = mysql_query($sql) or die(mysql_error());//クエリの実行 mysql_close($Con);//切断 ?> <html> <head> <title></title> </head> <body> <p>ご登録ありがとうございました。</p> <a href="01.php">戻る</a> </body> 以上のコードでデーターの追加が出来ません。 どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP