DBへのデータ保持とソートの実装について

このQ&Aのポイント
  • データの持ち方について、DB(MySQL)へは何を入れるべきか?PHPで計算可能なものは入れないべきか?
  • DBへデータを保持しない方がいいのか?PHPで計算可能な値についてはDBへ入れないべきか?
  • DBからデータを取り出してソートする際、一般的な実装方法は?SQL文でソートするか、PHPやJavaScriptで行うか?
回答を見る
  • ベストアンサー

データの持ち方について

一般的に、DB(MySQL)へは、何を入れるのでしょうか? PHPで計算可能なものは、なるべく入れない方がいいのでしょうか? 例:年齢を表示させたい場合、DBへ入れておく値 1.誕生日(から計算) 2.年齢 3.何も入れない(別データからPHPで計算可能な場合) なるべくDBへデータを保持しない方がいいのかな? と思い、今回、3でやってみました。 具体的には、mysql_fetch_arrayとかで、データを取り出し、 そこから色々計算して年齢を割り出し、表示させてみたのですが、 DBとPHPを使って色々やるんだったら、 初めから素直にDBへデータを入れといて、 そこから、取り出した方が、 いいのかな? とも思いました。 一般的に、DBへ入れなくても、 (計算等によって)取得できる値については、 やはり、DBへ入れない方がいいのでしょうか? また、ちょっと別件なのですが、 例えば、DBからデータを取り出して、 ソートして表示させたい際、 3つぐらい方法を思いつくのですが、 一般的には、どんな感じで実装するのでしょうか? 1.SQL文でソートをかけて取り出す 2.SQL文で取り出した後、ソート部分はPHPで行う 3.SQL文で取り出した後、ソートはJavaScriptで行なう 特にパフォーマンスを気にしているわけではないのですが、 普通、一般的に、どういう風に実装するのか分からず、質問してみました。 MySQLとPHPを使っている限りは、 余程大規模なサイトでなければ、この辺はあまり気にしなくてもよい感じでしょうか?

  • re999
  • お礼率61% (476/777)
  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

何のためのデータベースか、そこから考えてはいかがでしょうか。 「一般的」なんてありません。そのデータベースにあった内容のものを保存するのですから。 例えば 顧客データベースとかなら、1でしょう。今月誕生日の人を探したりとかもできますし。日付が変わるたびに年齢データを更新するのも大変です。計算自体もSQLで行うことができますし。 アンケート結果の集計なら2でしょう。欲しいのは、おそらくは回答時の年齢であって、現在や未来の年齢では無いでしょう。 占いの内容のデータベースで、ユーザーは利用登録無しに使い、星座などを求めるためだけに年齢を使う、ということなら3でしょう。 実装方法ですが、それぞれが得意なところをやらせる、ということになると思います。 データベースはデータをあれこれ操作するのが得意ですから、できる限りデータベースで処理して、PHPではHTMLとしての体裁を整えるだけ、というのが、いいと思います。 プログラム作るのも管理するのも、その方が楽ですし。

re999
質問者

お礼

回答ありがとうございました。 具体的に例を挙げていただいたので、 分かりやすかったです

その他の回答 (1)

  • marutone
  • ベストアンサー率40% (70/174)
回答No.1

まず最初の件ですが、 臨機応変に対応した方が良いですね。 今回の場合は1が適切だと思います。 年齢は簡単に求められるので‥。 2つ目についてですが、 1が適切だと思います。 通常はSQL内でソートをかけます。

re999
質問者

お礼

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

関連するQ&A

  • 同じデータが結果として出てくるので困ってます

    他人が作ったものを修正中です。 現在↓ カラム ID NO1 NO2 NO3     1  12 23 34 2 12 3 12 23 $sql="SELECT ID FROM `SHOPLIST`"; $db = mysql_query($sql); while($db2 = mysql_fetch_array($db)){ ・・・・省略 } 結果抽出データは 1 1 1 2 3 3 なぜか6件です。 NO1,NO2,NO3に値が入っている数と重複するデータ数が同じです。 現在はif文を使ってIDが同じものは処理しないという動きです。 これをif文を使わずに、MySQLだけでIDが同じものは抽出しないと いうことはできるのでしょうか。 考え方だけでも教えて頂きたいです、宜しくお願い致します。   

  • データの取得方法

    失礼いたします。 SQL文でDBからデータを取得して、それを 表示したいのですがうまくいきません。 どこを間違っているか、どうしたらいいか コメントお願いします。 //他のページからIDを取得 <?php $aid=htmlspecialchars($_GET["id"]); ?> //SQL <?php $sql = "SELECT A.USERID,A.NAME,B.BIL_ID,B.B.BIL_NAME FROM USER A,BIL B WHERE A.BIL_ID=B.BIL_ID AND USER_ID=".intval($_GET["aid"]); !$an = mysql_query($sql,$db) $user = mysql_fetch_row($an); mysql_free_result($an); ?> //データの表示 //SQLで実行した'BIL_ID'を表示したい。 <TD><INPUT type="text" name="bid" value="<?php print(intval($_GET["$user[2]"])) ?>"></TD>

    • ベストアンサー
    • PHP
  • データの更新

     失礼いたします。 JAVA初心者のjavateaです。 フォームからデータを入力してDBの更新を行いたいと思い、次のような計画を立てています。 1、フォームを作る 2、PHPでのMySQLへの接続法に倣い(PHPの参考書のみあるので)javaで接続。 3、フォームから値の受け渡しを作り、それに応じたSQL文を発行させる。 4、recurseし、自動的に更新する。 ここで、一番問題になるのは2番です。 タグ文章にjavaを埋め込む形でPHPと同じようにいくものなのでしょうか?javaでDBに接続を行いテーブルを表示することは出来ますので、データそのものを書き換える方法を教えていただければと思います。 よろしくお願いします。。('-'。)(。'-')。

    • ベストアンサー
    • Java
  • データ検索について

    現在フォームに入力された日付を検索して、その値に紐付くデータを 表示させるといった、検索システムを作成しています。 しかしフォームの値が上手く渡りません。 現在の症状としては フォームの値 2008-01-01 × フォームの値 "2008-01-01" ○ 上記の様に値をダブルクォーテンションで囲むと上手く渡るのですが、 囲まないと上手く渡りません。 なぜこのような動作になってしまうのか分からず、解決できません・・・ この解決策をご教授頂けると幸いです。 開発環境は UI Flex DB接続 AMF PHP DB MYSQL 日付のフォーマットはyyyy-mm-dd dateフィールドの値はtext 以下がソースになります。 ************************************************************* //$date フォームの値 function SearchData($date = "") { GLOBAL $dbh; //DB接続 if($date) { $sql = " SELECT * FROM tDate WHERE date = \"".$date."\""; } else { $sql = " SELECT * FROM tDate"; } $result = mysql_query( $sql ); while( $val = mysql_fetch_assoc( $result ) ) { $res_list[] = array( "date" => $val['date'], ); } return $res_list; } ************************************************************* 以上よろしくお願い致します。

    • 締切済み
    • PHP
  • mysql_fetch_assocについて

    お世話になります。 MySQLからデータを取得してWEBで表示するために mysql_fetch_assoc関数を使っています。 SQL文を作って、mysql_query関数で実行させ、 結果をmysql_fetch_assocの引数にしているのですが 作成するSQL文に”DESC”を追加すると何も表示されなくなります。 (mysql_num_rowsでデータ数は取得できているのでSQL自体は有効の ようです) SQL文から”DESC"を取ると、mysql_fetch_assocの結果も正常に表示 されるのですが、どうしても降順に並べ替えて表示したいので 解決方法をご存知の方ご教授ください。よろしくお願いします。

    • 締切済み
    • PHP
  • PHPでMySQLのデータを検索したい

    お世話になります。 PHPでMySQLのデータを検索したいと思い、 以下のようにしてみたのですがうまく表示されません。 -- $name = $_POST["name"]; $link = mysql_connect('localhost', '', ''); $db_selected = mysql_select_db('', $link); mysql_set_charset('utf8'); $sql = "SELECT * FROM search WHERE". $name; $result = mysql_query($sql); while($row = mysql_fetch_array($name)) { print $row['name']; } $close_flag = mysql_close($link); -- どう改善すればいいのでしょうか? 初心者の為、少々お見苦しい点があるかと思いますが どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLで戻り値が重複している

    PHPとMySQLを使っています。 下のようなSQL文を作成し、値を引き出そうとしています。 <SQL文> SELECT * FROM table_name WHERE A = "あ" AND B='い' <DBに登録済みの取り出したいデータ> あ、い、う、え、お ところが、戻ってくる値が、 あ、あ、い、い、う、う、え、え、お、お のように、値が重複して戻ってきます。 いろいろ調べましたが、原因がさっぱりわかりません。 ご存知の方、教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 配列に配列を足すことはできるか?

    PHPを使ってMYSQLのデータを吐き出すプログラムを作っています。 $re=mysql_query(SQL命令1); でDBに命令し $kekka=mysql_fetch_array($re) で、配列に代入 $re=mysql_query(SQL命令2); でDBの別テーブル(データ型やカラム数は同じ)に命令し $kekkaに情報を足すということがしたいのですが、どのように書けば$kekkaにデータが蓄積されていくのでしょうか?

    • ベストアンサー
    • PHP
  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL
  • mysql_fetch_array()関数でのエラー

    現在、PHPでMySQLの操作をテストしています。 Vista上にXAMPPをインストールした環境とXP上にApache,PHPとMySQLを個別にインストールした環境とで検証しています。 どちらの環境でも、テーブルにデータをインサートするところまでは出来ました。 mysql_fetch_array()関数を使ってSQLの実行結果を表示させるところで、XAMPPでは結果を表示できるのですが、個別インストール環境では Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\****\incert.php on line 8 が出てしまいます。 mysql_error()でエラーを表示させたところ No database selected と表示されます。 mysql_select_db("db_name"); でDBはせんたくされていると思う(事実、XAMPPでは選択されている)のですが、何が問題なのでしょうか?

専門家に質問してみよう