• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データベースについての質問です。)

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

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

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

  • ベストアンサー
  • 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/6969)
回答No.1

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

sinto58167
質問者

お礼

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