回答編集履歴

2

追記2

2016/08/30 06:48

投稿

yambejp
yambejp

スコア114850

test CHANGED
@@ -93,3 +93,63 @@
93
93
  ```
94
94
 
95
95
 
96
+
97
+ #このまま検証して
98
+
99
+
100
+
101
+ このままのソースで動作を検証してください
102
+
103
+
104
+
105
+ ```PHP
106
+
107
+ <?php
108
+
109
+ $shubetu= filter_input(INPUT_GET,"shubetu",FILTER_VALIDATE_INT , FILTER_REQUIRE_ARRAY)?:array();
110
+
111
+
112
+
113
+ $data=[];
114
+
115
+ $sql="SELECT * FROM articles WHERE 1";
116
+
117
+
118
+
119
+ if(count($shubetu)>0){
120
+
121
+ $sql.=" AND buildingtype IN(".implode(",",array_fill(1,count($shubetu),"?")).")";
122
+
123
+ $data=array_merge($data,$shubetu);
124
+
125
+ }
126
+
127
+ print $sql."<br>";
128
+
129
+ print_r($data);
130
+
131
+ ?>
132
+
133
+ <form mothod="get">
134
+
135
+ <input type="checkbox" name="shubetu[]" value="1">マンション
136
+
137
+ <input type="checkbox" name="shubetu[]" value="2">アパート
138
+
139
+ <input type="checkbox" name="shubetu[]" value="3">一戸建て・その他
140
+
141
+ <input type="submit" value="search">
142
+
143
+ </form>
144
+
145
+ ```
146
+
147
+
148
+
149
+ 最初はWHERE句に「WHERE 1」が入っている=すべて表示
150
+
151
+ どれかにチェックを入れて送ると
152
+
153
+ buildingtypeにIN検索が表示されて絞込をします
154
+
155
+

1

追記

2016/08/30 06:48

投稿

yambejp
yambejp

スコア114850

test CHANGED
@@ -15,3 +15,81 @@
15
15
 
16
16
 
17
17
  いずれにしてもどういうnameで値を渡しているか提示したほうが良いと思います
18
+
19
+
20
+
21
+ # 追記
22
+
23
+
24
+
25
+ なるほど、だいぶわかってきました。
26
+
27
+ まずbuildingtypeとfloorplanをvarcharで持っていますか?
28
+
29
+ それは効率がわるいので正規化してください
30
+
31
+ データはintで持つといいでしょう
32
+
33
+
34
+
35
+ shubetuテーブルを用意して
36
+
37
+ shubetu_id,shubetu_name
38
+
39
+ 1,マンション
40
+
41
+ 2,アパート
42
+
43
+ 3,一戸建て・その他
44
+
45
+ のようにします。
46
+
47
+
48
+
49
+ 検索方法は以下簡単なサンプルつけときます
50
+
51
+ ```HTML
52
+
53
+ <form>
54
+
55
+ <input type="checkbox" name="shubetu[]" value="1">マンション
56
+
57
+ <input type="checkbox" name="shubetu[]" value="2">アパート
58
+
59
+ <input type="checkbox" name="shubetu[]" value="3">一戸建て・その他
60
+
61
+ <input type="submit" value="search">
62
+
63
+ </form>
64
+
65
+ ```
66
+
67
+
68
+
69
+ ```PHP
70
+
71
+ $shubetu= filter_input(INPUT_GET,"shubetu",FILTER_VALIDATE_INT , FILTER_REQUIRE_ARRAY)?:array();
72
+
73
+
74
+
75
+ $data=[];
76
+
77
+ $sql="SELECT ・・・ WHERE 1";
78
+
79
+ if(count($shubetu)>0){
80
+
81
+ $sql.=" AND buildingtype IN(".implode(",",array_fill(1,count($shubetu),"?")).")";
82
+
83
+ $data=array_merge($data,$shubetu);
84
+
85
+ }
86
+
87
+ print $sql."<br>";
88
+
89
+ print_r($data);
90
+
91
+ //実際にはPDOでexecute($data)する
92
+
93
+ ```
94
+
95
+