不動産物件の条件検索システムのデータベースについて

このQ&Aのポイント
  • 不動産物件の条件検索システムのデータベースについて知りたいです。
  • 物件種別、価格帯、所在地、最寄り駅、間取り、こだわり条件の条件検索フォームを作成したいですが、データベース内でいくつのテーブルが必要なのか教えてください。
  • 不動産物件の絞り込み検索システムのデータベースに関する質問です。物件種別や価格帯、所在地、最寄り駅、間取り、こだわり条件などの検索条件を入力するフォームを作成したいのですが、どれくらいのテーブルが必要なのでしょうか?
回答を見る
  • ベストアンサー

データベースについての質問です。

いつも大変お世話になっております、ありがとうございます。 データベースについての質問です。 大変初歩的な質問ですが何卒よろしくお願い致します。 不動産物件の絞り込み検索システムを作成したいのですが、テーブルの作成方法がわかりません。 不動産の条件検索フォーム 物件種別  チェックボックス  3種類 価格帯   プルダウン 所在地   チェックボックス 最寄り駅  テキスト 間取り   チェックボックス    4種類 こだわり条件  チェックボックス  16種類 とする場合、データベース内でいくつテーブルを作成すればしっくりくるのでしょうか? どうかよろしくお願い致します。

  • MySQL
  • 回答数10
  • ありがとう数15

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

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.10

yambejpさん来てくれてよかったですね。いつも博雅適切なご回答拝見しています。 さて、ざっと見ですみませんが、こちらが想定していたこだわり条件テーブルは kid | noiyo 1  |新築 2  |南向き 3  |セキュリティ充実 ~ という「定義だけ」のものでした。この場合、bukkenテーブル本体の方には SET型のカラムを作り、 | kids | | 1,3,5,8 | のように該当するkidを(複数可のカンマ区切りで)入れておきます。なのでクエリは単純で SELECT * FROM bukken WHERE (price BETWEEN '1000' AND '3000') AND (address LIKE "%名古屋市西区%" OR address LIKE "%名古屋市東区%" ~) AND ( FIND_IN_SET("2",kids) AND FIND_IN_SET("3",kids) AND FIND_IN_SET("5",kids) ) のような感じで済むはずです。(実際には*ではなくきちんとカラム名を) また、地域は、address欄をLIKEで検索すると別テーブルが不要な反面、遅いですから、物件数や対象地域の範囲により、できれば 市町村コードなど利用すればずっと速くなるかと。 その場合はbukkenテーブルにエリアコードのカラムを作成・挿入しておけば、クエリは (area_code IN (23102,23103,23104)) /* 北区 or 東区 or 西区の例 */ のようになります。 ご参考まで。 http://www.soumu.go.jp/denshijiti/code.html

sinto58167
質問者

お礼

いつもアドバイスいただいて本当にありがとうございます。 今回の質問は私自身の方向性がかなりわからなくなってきているので一旦単純な作りにしてから後々発展させていこうと思いました。 別にパート2の質問に直したので機会があればまたご指導いただけたらと思います。 ベストアンサーは迷ったのですが、今回情報量が一番多かったと思いましたのでJaneDue様にさせていただきました。 他の方々もありがとうございました。

sinto58167
質問者

補足

JaneDue様、お答えいただきありがとうございます。 只今、どのようにシステムを実現しようかと迷走中です。 JaneDue様の方法も少し時間がかかるかもしれないですが理解しておきたいところです。 addressはLIKE検索になっていましたが、作っていくうちにcheckboxで十分かなと思いました。 ややこしくてすみません。 まずは前回のプログラムで実現してからかと思っています。 (多分前回の流用したほうが早いので) プログラムを簡単にやってしまう人にとってはどのパターンもすぐできてしまうのだと思いますが、私にはちょっと難しいです。 SQL文をどのようにPHPの中で作るかがわからないです。 ですので少し時間がかかるかもしれません。 理想はJaneDueさんとyambejpさんの両パターンできるのが理想だと思っております。 本当にお答えいただきありがとうございます。 感謝しております。

その他の回答 (9)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.9

おそらく、物件種別、所在地、間取りは要素ごとに排他的であって それをor検索するんですよね? こだわり条件は要素ごとに相関関係がなくand検索ですか? そのあたりがはっきりしないとSQL文も書けないし、テーブル構成もきまりません。 また価格帯については物件に実価格を投入すると思いますが、 変動が大きい要素なので履歴をのこすかどうか検討したほうがいいかもしれません なお1テーブルで管理する提案もあり個人的には悪くないとは思いますが チェックボックス要素は、テーブルを外出しした方が圧倒的に検索性があがるので、 できる限りテーブルを分けた方がいいと思います。

sinto58167
質問者

お礼

PHP部分訂正 住所のPHP部分がテキストになっていたのでcheckboxにしましたが、checkboxの項目を 複数入れるとSQL文がわからなくなります。 今のところは順番はバラバラですがフォームは予定通りに合わせていきたいです。 $sql = "SELECT t1.* FROM bukken as t1 "; $flag=true; //kid絞り込み if(isset($_REQUEST["kid"]) and is_array($_REQUEST["kid"])){ $sql.="INNER JOIN (SELECT DISTINCT fid FROM fdou_kodawari WHERE kid in ("; $sql.=implode(",",array_fill(0,count($_REQUEST["kid"]), '?')); $sql.=")) as t2 ON t1.id=t2.fid "; $data=array_merge($data,$_REQUEST["kid"]); $flag=false; } //WHERE句作成 $sql.= "WHERE 1 "; //名古屋の地域checkbox $sql = "SELECT t1.* FROM bukken as t1 "; if(isset($_REQUEST["chiiki_id"]) and is_array($_REQUEST["chiiki_id"])){ $sql.="INNER JOIN (SELECT DISTINCT chiid FROM chiiki WHERE chiiki_id in ("; $sql.=implode(",",array_fill(0,count($_REQUEST["chiiki_id"]), '?')); $sql.=")) as t2 ON t1.id=t2.chiid "; $data=array_merge($data,$_REQUEST["chiiki_id"]); $flag=false; } //WHERE句作成 $sql.= "WHERE 1 "; //価格絞り込み if(isset($_REQUEST["price_min"]) and $_REQUEST["price_min"]!==""){ $price_min=str_replace(",","",$_REQUEST["price_min"]); }else{ $price_min=0; } if(isset($_REQUEST["price_max"]) and $_REQUEST["price_max"]!==""){ $price_max=str_replace(",","",$_REQUEST["price_max"]); }else{ $price_max=100000000; } if(isset($_REQUEST["price_min"]) or isset($_REQUEST["price_max"])){ $sql.="AND price_min BETWEEN ? AND ? "; array_push($data,$price_min,$price_max); $flag=false; } //なにもパラメータがないときは表示しない if($flag) $sql.="AND 0 ";; //参考 print $sql."<br>"; print_r($data); //実行 $pdo = new PDO($dsn,$username,$password); $stmt = $pdo->prepare($sql); $stmt->execute($data); $rows=array(); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $rows[]=$row; }; print_r($rows); ?> <table border="1"> <caption>検索結果</caption> <tr> <th></th> <th>マンション</th> <th>販売価格</th> <th>住所</th> </tr> <?php foreach((array) $rows as $row ){ ?> <tr> <td><img src="hotel/<?php print( htmlspecialchars( $row["id"], ENT_QUOTES )); ?>.png" /></td> <td><?php print( htmlspecialchars( $row["bukken_name"], ENT_QUOTES )); ?></td> <td>\<?php print( htmlspecialchars( number_format( $row["price_min"] ),ENT_QUOTES ) ); ?></td> <td> <?php print( htmlspecialchars( $row["address"], ENT_QUOTES ) ); ?> </td> </tr> <?php } } ?> </table> </div> </body> </html> chiikiテーブル chiid chiiki_id 1 1 2 2 3 3 4 4 5 15 6 6 7 2 8 2 9 2 11 6 12 6 13 1 14 1 15 1 以下略 名古屋地域checkboxフォーム部分 <th>名古屋市</th> <td> <input type="checkbox" name="chiiki_id[]" value="1" <?php if( $_REQUEST["chiiki_id"] == "1" ){ print( 'checked' ); } ?>/> 中村区 <input type="checkbox" name="chiiki_id[]" value="2" <?php if( $_REQUEST["chiiki_id"] == "2" ){ print( 'checked' ); } ?>/> 西区 <input type="checkbox" name="chiiki_id[]" value="3" <?php if( $_REQUEST["chiiki_id"] == "3" ){ print( 'checked' ); } ?>/> 昭和区 <input type="checkbox" name="chiiki_id[]" value="4" <?php if( $_REQUEST["chiiki_id"] == "4" ){ print( 'checked' ); } ?>/> 港区 <input type="checkbox" name="chiiki_id[]" value="5" <?php if( $_REQUEST["chiiki_id"] == "5" ){ print( 'checked' ); } ?>/> 守山区<br /> <input type="checkbox" name="chiiki_id[]" value="6" <?php if( $_REQUEST["chiiki_id"] == "6" ){ print( 'checked' ); } ?>/> 東区 <input type="checkbox" name="chiiki_id[]" value="7" <?php if( $_REQUEST["chiiki_id"] == "7" ){ print( 'checked' ); } ?>/> 中区 以下省略

sinto58167
質問者

補足

yambejp様、今回もアドバイスいただき誠にありがとうございます。 前回はおかげさまでビジネスホテルのアプリが完成しました。 作ってみて満足したのですが、もっと本格的なものに近づけたいと思うようになりました。 前回のプログラムを流用して不動産のサイトが作れたら面白いのではないかと思ったのですが、少しバリエーションが変わるだけで中々まとまらず難しくなってしまいました。 今回もアドバイス頂けたらありがたいと思っております。 >おそらく、物件種別、所在地、間取りは要素ごとに排他的であって >それをor検索するんですよね? 仰るとおりで、この条件で大丈夫です。 >こだわり条件は要素ごとに相関関係がなくand検索ですか? 要素ごとに相関関係なしでand検索で作っていこうと思っています。 ある程度テーブルを作ってみました。(マンション名は仮名です) あと愛知県の地域検索のチェックボックスを作るのでテーブルがもう一ついるのでしょうか? このあたりはどうすれば良いのか迷っています。 でもこの際検索の精度が良いほうにしたいと思います。 そして値を受けて表示させるためのPHPが特にわからないのでアドバイス頂けたらと思っております。 本にはほとんど載ってないので質問するしか今のところ解決できない状態です。 みなさんはフレームワークを使って制作されているのでしょうか?未だに謎です。 テーブル bukken id、 bukken_name、 address、     price_min、 price_max、 chiiki_id、 station、 madori_id、  1 名駅MID 愛知県名古屋市中村区 40770000、 55100000 1 名古屋駅 1 2 プレサン浄心 愛知県名古屋市西区 30800000、 40001000 2 浄心駅 2 3 アネシア八事 愛知県名古屋市昭和区 50000000、 62510000 3 八事日赤 1 4 アメニ港明 愛知県名古屋市港区 25000000、 35000000 4 港区役所駅 3 5 ユーハウ上飯田 愛知県名古屋市北区 32000000、 43330000 15 上飯田駅 1 6 ローレル葵 愛知県名古屋市東区 30000000、 46000000 6 高岳駅 1 7 ラ上小田井 愛知県名古屋市西区 35000000、 55000000 2 上小田井駅 1 8 ポレスター名西 愛知県名古屋市西区 28000000、 38000000 2 浄心駅 2 9 メイト栄生 愛知県名古屋市西区 28400000、 36500000 2 栄生駅 1 10 那古野ビル 愛知県名古屋市西区 10000000、 10000000 2 国際センター駅 1 11 パーク徳川 愛知県名古屋市東区 43000000、 59000000 6 森下駅 1 12 サンク大曽根 愛知県名古屋市東区 26900000、 30300000 6 大曽根駅 3 テーブル fudou_kodawari fid kid 1 1 1 2 1 3 2 1 3 2 3 3 3 4 4 3 5 4 6 4 7  1 8 1 8 2 8 4 9 5 10 1 10 4 <table> <tr> <th>こだわり条件</th> <td> <input type="checkbox" name="kid[]" value="1" <?php if( $_REQUEST["kid"] == "1" ){ print( 'checked' ); } ?>/> 新築 <input type="checkbox" name="kid[]" value="2" <?php if( $_REQUEST["kid"] == "2" ){ print( 'checked' ); } ?>/> 南向き <input type="checkbox" name="kid[]" value="3" <?php if( $_REQUEST["kid"] == "3" ){ print( 'checked' ); } ?>/> セキュリティ充実 <input type="checkbox" name="kid[]" value="4" <?php if( $_REQUEST["kid"] == "4" ){ print( 'checked' ); } ?>/> 市街地が近い<br /> <input type="checkbox" name="kid[]" value="5" <?php if( $_REQUEST["kid"] == "5" ){ print( 'checked' ); } ?>/> 内装リフォーム <input type="checkbox" name="kid[]" value="6" <?php if( $_REQUEST["kid"] == "6" ){ print( 'checked' ); } ?>/> システムキッチン <input type="checkbox" name="kid[]" value="7" <?php if( $_REQUEST["kid"] == "7" ){ print( 'checked' ); } ?>/> ペット可</td> </tr> </table> /*----------------中略----------------*/ <?php //初期設定 //username,$password,$dbnameは適当に if( $_REQUEST["cmd"] == "search" ){ $dsn = 'mysql:host=localhost;dbname=xxxxxx'; $username = 'root'; $password = 'xxxxxxx'; $data=array(); $sql = "SELECT t1.* FROM bukken as t1 "; $flag=true; //kid絞り込み if(isset($_REQUEST["kid"]) and is_array($_REQUEST["kid"])){ $sql.="INNER JOIN (SELECT DISTINCT fid FROM fdou_kodawari WHERE kid in ("; $sql.=implode(",",array_fill(0,count($_REQUEST["kid"]), '?')); $sql.=")) as t2 ON t1.id=t2.fid "; $data=array_merge($data,$_REQUEST["kid"]); $flag=false; } //WHERE句作成 $sql.= "WHERE 1 "; //住所絞込み if(isset($_REQUEST["address"]) and $_REQUEST["address"]!==""){ $sql.="AND address LIKE ? "; array_push($data, "%" .$_REQUEST["address"]."%"); $flag=false; } //名古屋の地域絞込みの予定 //価格絞り込み if(isset($_REQUEST["price_min"]) and $_REQUEST["price_min"]!==""){ $price_min=str_replace(",","",$_REQUEST["price_min"]); }else{ $price_min=0; } if(isset($_REQUEST["price_max"]) and $_REQUEST["price_max"]!==""){ $price_max=str_replace(",","",$_REQUEST["price_max"]); }else{ $price_max=100000000; } if(isset($_REQUEST["price_min"]) or isset($_REQUEST["price_max"])){ $sql.="AND price_min BETWEEN ? AND ? "; array_push($data,$price_min,$price_max); $flag=false; } //なにもパラメータがないときは表示しない if($flag) $sql.="AND 0 ";; //参考 print $sql."<br>"; print_r($data); //実行 $pdo = new PDO($dsn,$username,$password); $stmt = $pdo->prepare($sql); $stmt->execute($data); $rows=array(); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $rows[]=$row; }; print_r($rows); ?> <table border="1"> <caption>検索結果</caption> 以下省略

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.8

範囲の広さによっては、住所は県名や市町村名を別カラムにした方が早いかもしれませんね。 あるいは郵便番号を利用して別テーブルにしてもよいでしょう。郵便番号のデータは配布されています。 http://www.post.japanpost.jp/zipcode/download.html こだわり条件については、カラムを配列に適しているSET型として MySQLの FIND_IN_SET で取得する方法もあります。回答No6のように翻訳用のテーブルを用意すれば、語句の変更("南むき"=>"南向き"とか)にも柔軟に対応できます。 そのほか余計な事かも知れませんが、売主の情報は? 紹介文は? 画像は? その他レインズ登録フラグや物件番号、有効期限、延長回数、あるいは担当者などは不要? とつい思ってしまいますが…。 いずれにしましても、どのようにテーブルを切るか、という手法は「正規化」といってすでにノウハウが確立されています。RDBの基礎ですし基本法則はたった3つだけですから、学習されることを強くお勧めします。 見えてくるはずです。 http://itpro.nikkeibp.co.jp/article/COLUMN/20130416/471174/?ST=develop http://rfs.jp/sb/sql/s01/05-13.html ほか[データベース 正規化 ]で検索してみて下さい。

sinto58167
質問者

お礼

<tr> <th>こだわり条件</th> <td> <input type="checkbox" name="kid[]" value="1" <?php if( $_REQUEST["kid"] == "1" ){ print( 'checked' ); } ?>/> 新築 <input type="checkbox" name="kid[]" value="2" <?php if( $_REQUEST["kid"] == "2" ){ print( 'checked' ); } ?>/> 南向き <input type="checkbox" name="kid[]" value="3" <?php if( $_REQUEST["kid"] == "3" ){ print( 'checked' ); } ?>/> セキュリティ充実 <input type="checkbox" name="kid[]" value="4" <?php if( $_REQUEST["kid"] == "4" ){ print( 'checked' ); } ?>/> 市街地が近い<br /> <input type="checkbox" name="kid[]" value="5" <?php if( $_REQUEST["kid"] == "5" ){ print( 'checked' ); } ?>/> 内装リフォーム <input type="checkbox" name="kid[]" value="6" <?php if( $_REQUEST["kid"] == "6" ){ print( 'checked' ); } ?>/> システムキッチン <input type="checkbox" name="kid[]" value="7" <?php if( $_REQUEST["kid"] == "7" ){ print( 'checked' ); } ?>/> ペット可</td> </tr> </table> <input type="submit" value="検索" class="Btn-gray button"> </form> <p>&nbsp;</p> <?php //初期設定 //username,$password,$dbnameは適当に if( $_REQUEST["cmd"] == "search" ){ $dsn = 'mysql:host=localhost;dbname=xxxxxx'; $username = 'root'; $password = 'xxxxxxxx'; $data=array(); $sql = "SELECT t1.* FROM bukken as t1 "; $flag=true; //kid絞り込み if(isset($_REQUEST["kid"]) and is_array($_REQUEST["kid"])){ $sql.="INNER JOIN (SELECT DISTINCT fid FROM fdou_kodawari WHERE kid in ("; $sql.=implode(",",array_fill(0,count($_REQUEST["kid"]), '?')); $sql.=")) as t2 ON t1.id=t2.fid "; $data=array_merge($data,$_REQUEST["kid"]); $flag=false; } //WHERE句作成 $sql.= "WHERE 1 "; //住所絞込み if(isset($_REQUEST["address"]) and $_REQUEST["address"]!==""){ $sql.="AND address LIKE ? "; array_push($data, "%" .$_REQUEST["address"]."%"); $flag=false; } //名古屋の地域絞込みフォームから値を受けるPHPの予定 //価格絞り込み if(isset($_REQUEST["price_min"]) and $_REQUEST["price_min"]!==""){ $price_min=str_replace(",","",$_REQUEST["price_min"]); }else{ $price_min=0; } if(isset($_REQUEST["price_max"]) and $_REQUEST["price_max"]!==""){ $price_max=str_replace(",","",$_REQUEST["price_max"]); }else{ $price_max=100000000; } if(isset($_REQUEST["price_min"]) or isset($_REQUEST["price_max"])){ $sql.="AND price_min BETWEEN ? AND ? "; array_push($data,$price_min,$price_max); $flag=false; } //なにもパラメータがないときは表示しない if($flag) $sql.="AND 0 ";; //参考 print $sql."<br>"; print_r($data); //実行 $pdo = new PDO($dsn,$username,$password); $stmt = $pdo->prepare($sql); $stmt->execute($data); $rows=array(); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $rows[]=$row; }; print_r($rows); ?> <table border="1"> <caption>検索結果</caption> <tr> <th></th> <th>マンション</th> <th>販売価格</th> <th>住所</th> </tr> <?php foreach((array) $rows as $row ){ ?> <tr> <td><img src="hotel/<?php print( htmlspecialchars( $row["id"], ENT_QUOTES )); ?>.png" /></td> <td><?php print( htmlspecialchars( $row["bukken_name"], ENT_QUOTES )); ?></td> <td>\<?php print( htmlspecialchars( number_format( $row["price_min"] ),ENT_QUOTES ) ); ?></td> <td> <?php print( htmlspecialchars( $row["address"], ENT_QUOTES ) ); ?> </td> </tr> <?php } } ?> </table> </div> </body> </html> // テーブル bukken 1 名駅MID 愛知県名古屋市中村区 40770000 55100000 1 名古屋駅 1 2 プレサン浄心 愛知県名古屋市西区 30800000 40001000 2 浄心駅 2 3 アネシア八事 愛知県名古屋市昭和区 50000000 62510000 3 八事日赤 1 4 アメニ港明 愛知県名古屋市港区 25000000 35000000 4 港区役所駅 3 5 ユーハウ上飯田 愛知県名古屋市北区他 32000000 43330000 15 上飯田駅 1 6 ローレル葵 愛知県名古屋市東区葵 30000000 46000000 6 高岳駅 1 7 ライオンズ上小田井 愛知県名古屋市西区 35000000 55000000 2 上小田井駅 1 8 ポレスターセントラル名西 愛知県名古屋市西区 28000000 38000000 2 浄心駅 2 9 メイト栄生 愛知県名古屋市西区栄生x丁目xxxx番(地番) 28400000 36500000 2 栄生駅 1 10 那古野ビル 愛知県名古屋市西区那古野x 10000000 10000000 2 国際センター駅 1 長文失礼いたしました。 タイミングが合うようでしたらアドバイス頂けたらありがたいです。

sinto58167
質問者

補足

お答えいただき誠にありがとうございます。 ただいま下記のように途中までプログラムを組んでみました。 データベースの正規化の情報ありがとうございます。 以前に調べたことはあるものの独学だと何が重要なのかなかなかわからないですが 頑張って勉強してみようと思ってます。 chiiki_idのフォームはできたのですが、PHPで値を受けてから表示させるプログラムがわからないのでもしタイミングが合うのであればご教授いただけたらと思っております。 プログラムは他の人から教えてもらったり、プログラムを流用しているだけなので 基本が難しいです。 よろしくお願いいたします。 前半省略 <h1>マンション物件の条件検索</h1> <form name="search_form" action="mansion.php" method="post" > <input type="hidden" name="cmd" value="search" /> <table> <tr> <th>価格帯</th> <td> <select name="price_min"> <option value="1" selected="selected">下限なし</option> <option value="10000000">1000万</option> <option value="15000000">1500万</option> <option value="20000000">2000万</option> <option value="25000000">2500万</option> <option value="30000000">3000万</option> <option value="35000000">3500万</option> <option value="40000000">4000万</option> <option value="45000000">4500万</option> <option value="50000000">5000万</option> <option value="55000000">5500万</option> <option value="60000000">6000万</option> </select> ~ <select name="price_max"> <option value="999999999999" selected="selected">上限なし</option> <option value="10000000">1000万</option> <option value="15000000">1500万</option> <option value="20000000">2000万</option> <option value="25000000">2500万</option> <option value="30000000">3000万</option> <option value="35000000">3500万</option> <option value="40000000">4000万</option> <option value="45000000">4500万</option> <option value="50000000">5000万</option> <option value="55000000">5500万</option> <option value="60000000">6000万</option> </select> </td> </tr> <tr> <th>愛知県 - 名古屋市(住所)</th> <td><input type="text" name="address" value="<?php print( htmlspecialchars( $_REQUEST["address"] ,ENT_QUOTES ) ) ?>" size="50"></td> </tr> <tr> <th>名古屋市</th> <td> <input type="checkbox" name="chiiki_id[]" value="1" <?php if( $_REQUEST["chiiki_id"] == "1" ){ print( 'checked' ); } ?>/> 中村区 <input type="checkbox" name="chiiki_id[]" value="2" <?php if( $_REQUEST["chiiki_id"] == "2" ){ print( 'checked' ); } ?>/> 西区 <input type="checkbox" name="chiiki_id[]" value="3" <?php if( $_REQUEST["chiiki_id"] == "3" ){ print( 'checked' ); } ?>/> 昭和区 <input type="checkbox" name="chiiki_id[]" value="4" <?php if( $_REQUEST["chiiki_id"] == "4" ){ print( 'checked' ); } ?>/> 港区 <input type="checkbox" name="chiiki_id[]" value="5" <?php if( $_REQUEST["chiiki_id"] == "5" ){ print( 'checked' ); } ?>/> 守山区<br /> <input type="checkbox" name="chiiki_id[]" value="6" <?php if( $_REQUEST["chiiki_id"] == "6" ){ print( 'checked' ); } ?>/> 東区 <input type="checkbox" name="chiiki_id[]" value="7" <?php if( $_REQUEST["chiiki_id"] == "7" ){ print( 'checked' ); } ?>/> 中区 <input type="checkbox" name="chiiki_id[]" value="8" <?php if( $_REQUEST["chiiki_id"] == "8" ){ print( 'checked' ); } ?>/> 熱田区 <input type="checkbox" name="chiiki_id[]" value="9" <?php if( $_REQUEST["chiiki_id"] == "9" ){ print( 'checked' ); } ?>/> 中川区 <input type="checkbox" name="chiiki_id[]" value="10" <?php if( $_REQUEST["chiiki_id"] == "10" ){ print( 'checked' ); } ?>/> 千種区<br /> <input type="checkbox" name="chiiki_id[]" value="11" <?php if( $_REQUEST["chiiki_id"] == "11" ){ print( 'checked' ); } ?>/> 名東区 <input type="checkbox" name="chiiki_id[]" value="12" <?php if( $_REQUEST["chiiki_id"] == "12" ){ print( 'checked' ); } ?>/> 緑区 <input type="checkbox" name="chiiki_id[]" value="13" <?php if( $_REQUEST["chiiki_id"] == "13" ){ print( 'checked' ); } ?>/> 天白区 <input type="checkbox" name="chiiki_id[]" value="14" <?php if( $_REQUEST["chiiki_id"] == "14" ){ print( 'checked' ); } ?>/> 瑞穂区<br /> <input type="checkbox" name="chiiki_id[]" value="15" <?php if( $_REQUEST["chiiki_id"] == "15" ){ print( 'checked' ); } ?>/> 北区 <input type="checkbox" name="chiiki_id[]" value="16" <?php if( $_REQUEST["chiiki_id"] == "16" ){ print( 'checked' ); } ?>/> 南区 </td> </tr> 長文申し訳ありません。 お礼入力に続きます。

  • tajix14
  • ベストアンサー率57% (11/19)
回答No.7

追記その2 間取り4種、こだわり物件16種を横一列に並べ、該当すれば1、該当しなければ0を記入するという方法もあります。 チェックボックスで拾っていく場合は、この方が簡単です。(likeのようなあいまい検索が不要になります) この場合、当然ですが、シートは1枚です。

sinto58167
質問者

補足

お答えいただきありがとうございます。 値を2つ入れることができることが昨日わかったところで驚いています。 要はintではなくvarcharで入れれば良いのですよね? まだlikeのところで止まっていて自分なりの検証に時間がかかっていますので、何がベストなのか判断できずにいます。 また判断できしだいお礼コメントさせていただきたいと思っております。 かなり丁寧な対応で本当に感謝しております。

  • tajix14
  • ベストアンサー率57% (11/19)
回答No.6

追記 下記の A~Pを エレベーター、庭付き  などの日本語で登録することが可能です。 この場合、シートは1枚となります。 A~Pを英文字のまま登録する場合は、A はエレベーターを指すなどの翻訳用のテーブルが必要です。 この場合はテーブルは2枚になります。

  • tajix14
  • ベストアンサー率57% (11/19)
回答No.5

価格帯   プルダウン               最寄り駅  テキスト                 こだわり条件  チェックボックス  16種類 A~P とする。 こだわり条件のカラムはひとつとし、 物件A     A,F,G 物件B    B,C,E,G,H,I    のようにそれぞれのカラムにA~Pまで入れておく。 価格帯3500未満 最寄駅 自由が丘 こだわり条件 A F G のいずれかを抽出 select * from data where kakaku < '3500' and station = '自由が丘' and (kodawari like '%A%' or kodawari like '%F%' or kodawari like '%G%') こだわり条件が「選択したすべてを満たすものを抽出」の場合は or をand とする。

  • tajix14
  • ベストアンサー率57% (11/19)
回答No.4

>後になって気づいたのですが、物件種別、間取り、こだわり条件は1つのみの選択ではなく複数選択できるようにしたいと思っております。 >その場合、1つのテーブルではなく、やはり複数のテーブルになってしまうのではないかと思っております。 いいえ、その場合も and 条件、or 条件を使うことによりひとつのテーブルで十分です。 多分、データベースというものを難しく考えすぎです。

sinto58167
質問者

補足

tajix14様、お答えいただきありがとうございます。 ということはこのように1項目に複数の(この場合の項目はこだわり条件3つです)条件があるとしても、 テーブル1つなのでしょうか? 以前一回似たようなサイトを作ったのですが、そのためにわざわざ2つのテーブルを作ってしまいました。 ID 物件種別 価格    所在地   最寄り駅   間取り   こだわり物件 1   1      3500万  千種区    自由が丘駅  1      1(新築) 2(南向き) 3(エレベーター) データベースにデータを入れる場合こだわり物件の項目に1,2,3と入れるのでしょうか? またご教授いただけたらありがたいです。    

  • tajix14
  • ベストアンサー率57% (11/19)
回答No.3

回答NO1さんの回答をよく確認ください。 >テーブルというのはファイルのこと。この場合は1つでいいです。 この場合は、これ1つでいいということです。複数に分けるメリットがゼロですので.... NO1さんの回答に付け加えるとすれば、ID欄を追加するくらいだと思います。 >項目:ID、物件種別、価格、所在地、最寄り駅、間取り、こだわり物件 もともとのデータがエクセル表で1枚で表せるデータであり、「エクセルのソートや並べ替え、フィルタによるキーワード抽出」などで十分用が足りる程度の条件であれば、テーブルはひとつで出来ます。 今回の 物件種別  チェックボックス  3種類 価格帯   プルダウン 所在地   チェックボックス 最寄り駅  テキスト 間取り   チェックボックス    4種類 こだわり条件  チェックボックス  16種類 というのはすべて1枚のエクセル上で、「フィルタ&キーワード抽出」で出来ますよね。 であればテーブル1枚で十分です。

sinto58167
質問者

補足

お答えいただき誠にありがとうございます。 大変感謝しております。 質問の仕方が悪かったと思います。 後になって気づいたのですが、物件種別、間取り、こだわり条件は1つのみの選択ではなく複数選択できるようにしたいと思っております。 その場合、1つのテーブルではなく、やはり複数のテーブルになってしまうのではないかと思っております。 説明不足ですみませんでした。 お答えいただき、本当にありがとうございました。

  • kireek
  • ベストアンサー率0% (0/5)
回答No.2

こんなイメージでしょうか。 物件テーブル  id、価格(integer)、所在地ID、最寄り駅(text)、間取りID 物件種別テーブル  id、物件種別名 物件と物件種別のヒモ付けテーブル  id、物件ID、物件種別ID 所在地テーブル  id、所在地名 物件と所在地のヒモ付テーブル  id、物件ID、所在地ID こだわり条件テーブル  id、こだわり条件名 物件とこだわり条件のヒモ付テーブル  id、物件ID、こだわり条件ID 恐らくですが、自分の理解が間違って無ければ、7つのテーブルを作れば実現できるかと思います。 具体的な SQL 文は大丈夫ですか?

sinto58167
質問者

補足

お答えいただきありがとうございます。 途中までテーブルを考えたのですが、あまり自信がないのでまたアドバイスいただけたらと思っております。 物件テーブル id   price_min   price_max shozaichi_id station madori_id 1   40770000   55100000   1    名古屋駅    1 2   30800000   40001000   2    浄心駅    2 3   50000000   62510000   5    八事日赤    1 4   25000000   35000000   4    港区役所駅   3 5   32000000   43330000   3    上飯田駅    1 6   30000000   46000000   6    高岳駅    1 物件種別テーブル id bukken_name 1 名駅MIDWEST 2 プレサンス浄心 3 アネシア八事 4 アメニティ港明 5 ユーハウス上飯田 6 ローレルアイ葵 物件と物件種別のヒモ付けテーブルのテーブルはよくわかりません。どのようにすれば良いのでしょうか? お手数ですがアドバイスいただけるとありがたいです。 id、物件ID、物件種別ID 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 私が考えるとこのようになってしまいます^^; あとSQL文はお察しの通りさっぱりわかりません。 テーブルがわかったらまた質問させて頂こうと思っております。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

テーブルというのはファイルのこと。この場合は1つでいいです。 テーブル名:物件テーブル 項目:物件種別、価格、所在地、最寄り駅、間取り、こだわり物件 例えば、2つが良い場合はこんなかんじ。 テーブル1:クラステーブル 項目:学年、クラス、担任 テーブル2:生徒テーブル 項目:学年、クラス、出席番号、氏名、住所、電話番号、父兄の名前 これを1つにすると、 項目として担任の名前がクラスの人数分できますよね。 同じデータは記憶領域の無駄であり、また、担任が変わった時に影響範囲が多くなります。

sinto58167
質問者

お礼

お答えいただきありがとうございます。 なるほど。 後々のことを考えてテーブルを分けるのですね。 今後の参考になります。 ありがとうございました。

関連するQ&A

  • データベースからの絞り込み検索とCF作成

    MSアクセス2013で作成したデータベースがあります。 データベースのカラムには、複数のチェックボックスが含まれています。 絞り込み検索では、レコードのチェックボックスに1つでもチェックが入っている項目を除外したのち、 残ったレコードの”製品名”カラムを抽出したいと思っています。 テーブルはあるのですが、アクセスを利用した経験がほとんどなく、 コントロールフォームの作成方法や検索で該当したカラムのみを抽出する方法がわかりません。 ご指導頂けないでしょうか よろしくお願いします。

  • 2つのデータベースのデータを1つに合わせてのソート方法

    よろしくお願いします。 Accessで作成されたデータベースが2つあり、それぞれ同じ項目名で構成されているテーブルが1つずつあります。(データの変更前と変更後というように2つのデータベースに分けています。全体で約50万件です。) 検索用のフォームを作成し、条件に合致するデータを両方のデータベースから検索してフォーム上のリストボックスに表示していきたいのですが、その表示順番を2つのデータを合わせて日付順に並び変えたいのです。このような処理が可能なのかどうかも不明なのですが、可能であればその方法を教えていただけないでしょうか。

  • データベースをJavaScriptで処理する

    ある相談をされました。 不動産のサイトで、希望の条件の物件を検索できるようにするらしく、 ”データベースをJavaScriptで処理する”らしいのですが この言葉の意味から推測されるデータベースとはどんな形式のものが 考えられるでしょうか? 仮にaspファイルだとするとJavaScriptで処理できるのでしょうか? また、この検索システムのおおざっぱなやり方を 教えてもらう事ができますか? お願いします。

  • Access2000での質問

    Access2000で、あるデータベースの簡単な検索システムを作り社内で利用しております。その中で、テーブル作成クエリを使用して絞り込みを行うものがあるのですが、毎回「既存でテーブルはクエリを実行する前に削除されます。よろしいですか」という確認メッセージが出しまいます。頻繁に使用するため、このメッセージが非常にうっとうしいので、でないようにする方法はありますか? よろしくお願いします。

  • VB6について質問です。

    フォルダを検索できるツールを作成してます。 【検索フォルダ】テキストボックスがあり、 例)C:\ と入力されてる場合、C:\の配下にあるフォルダをリストボックスに表示されます。 全てのフォルダを表示させるのではなく、 【検索条件】テキストボックスに 入力された文字列を (1)前方一致(2)完全一致(3)部分一致の 3つのオプションボタンにチェックを入れて検索ボタンで検索する処理を作成したいと思ってます。 全てのフォルダを表示させることはできたのですが、3パターンの検索条件で絞り込み表示させる方法がわかりません。。。。 Likeメソッドを使用すればよいのか… 方法わかる方いらっしゃいましたら教えてください。 よろしくお願いいたします。

  • 日付でのデータベース検索

    Webでデータベース検索フォームを作成しています。 ソースはmdbから引っ張ってきています。 フォームでは二つの日付を指定して、 その間の期間のものを抽出したいと考えています。 たとえば「2007/01」~「2007/03」と指定した際に、 「2007/01」、「2007/02」、「2007/03」が抽出されるようにします。 (ソースデータも、年月のみです) ブラウザ上で、年月をそれぞれ別のプルダウンで選択して抽出させたいのですがうまくいきません。 テキストボックスで、期間A、Bをそれぞれ「2007/01」のフォーマットで記述したり、「2007/01」をプルダウンで選択させる場合は抽出できました。 「2007」と「01」をそれぞれプルダウンで選択した場合に、 「2007/01」として比較させる方法はありますでしょうか?

  • 大量のカラムが検索対象の場合の効率的なDBの構造

    phpからmysqlのクエリを作りコンテンツを検索・絞り込みさせようと考えています。 説明するのが苦手なため画像での説明になってしまいますが、 データベースの構造 http://blog-imgs-54.fc2.com/s/k/s/sksfiosjdijf34/20120614-1.jpg 絞り込みページのイメージ http://blog-imgs-54.fc2.com/s/k/s/sksfiosjdijf34/20120614-2.jpg 種類テーブルだけは「名前」が決まれば「仲間」と「原産地」が決まるので正規化することができましたが、他はできないと思います。 現在所在地テーブルはできそうですが、市によって町名が重なってしまうところがあるので正規化していません。 特徴テーブルは、種類による一般的な特徴よりも実際の特徴を優先しているので、同じ種類でも特徴がそれぞれ違います。 テーブルを分けている理由は、その方が管理しやすいと思ったからです。 特徴テーブル、日付テーブルも同じ理由です。 コメントテーブルのデータは検索しません。 「番号」には主キーを、種類テーブルは「名前」のみ、その他のカラムには全てインデックスをつけます。コメントテーブルはつけません。 そして、絞り込みページでは、 それぞれのカラムでソートさせる機能もあります。 「絞り込み」を押すと選択した条件に全て一致するコンテンツを絞り込みます。 「詳細へ」を押すと詳細のページに入り、 詳細のページでは、そのフィールドの全てのカラムのデータを表示させます。 もっと早く検索でき、効率的な構造にしたいのですが、アドバイスをいただけないでしょうか。

    • ベストアンサー
    • MySQL
  • JSPでデータベース作成

    JSPでMySQLを使って、自動でデータベースを作成したいのですが可能でしょうか? MySQLであらかじめデータベースとテーブルを作成しておいて、そこのデータを検索したり、追加したりは出来るのですが、JSPでデータベースを1から作成することが出来ません。 JSPでデータベース名やテーブル名を入力させてから、そこにデータを追加したいと考えています。 何かいい方法ご存知の方、教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • データベースから特定の要件を満たすデータ抽出

    エクセルに入力したデータベースからデータの抽出をしたいと考えています。 データ抽出はフォームにチェックボタン(およそ60種類)で、条件をチェックします。 データベースからチェックに該当しないもののみを抽出して、他のシートへ転記したいのですが、 このようなファイルの作成方法を教えて頂けないでしょうか?

  • Accessでデータベースを作っています。

    Accessでデータベースを作っています。 先日、こちらで質問をさせていただいて、クエリで複数のフィールドを対象にデータを検索する ことはクリアできました。 ありがとうございました。 ご指導に基づき、4つのフィールド(仮にA,B,C,D)について、クエリの抽出条件に  Like "*" & [Aを入力] & "*"  Like "*" & [Bを入力] & "*" ・・・ とそれぞれ設定してパラメータ入力を求め、4つの条件すべて、または一部のみ設定して検索し、 正しい検索結果が得られました。 今度は、検索用のフォームを作成し、フォームで入力した条件をクエリに送って、同じ結果を 得たいと思うのですが、以下の方法では正しい検索結果が出てきません。 ・フォームに検索用のボックスをA~Dまで4つ作成(ひとつはコンボボックス、あとはテキスト) ・クエリの抽出条件に、それぞれ以下を入力     Like "*" & [Forms]![Q_form(作成したフォームの名前)]!                       [A(それぞれの検索ボックスの名前)] & "*" ・フォームに「クエリの実行」のコマンドボタンを配置 パラメータで入力する代わりにフォームを使いたい、というものなのですが(パラメータ入力 よりも、コンボボックスを使って値を選ぶ方が検索する人には使いやすいかと思って)、どうしたら うまいこといきますでしょうか。。 教えてください。