■
重複データがあったとき、1件だけ表示したい場合があると思います。
私の場合は、検索でソートした後に重複データを1件だけ表示するようにしたかったのです。
■チェックボックスでソート
↓地域を選択
▼東京都(value="1")
大阪府(value="2")
福岡県(value="3")
↓カテゴリを選択
□りんご(value="1")
□みかん(value="2")
□アイス(value="3")
□もも(value="4")
□メロン(value="5")
※複数チェックしてソートすることができる
登録データは・・・
tableA
id | shop_id | cate_no |
---|---|---|
1 | 0001 | 1 |
2 | 0001 | 3 |
3 | 0001 | 4 |
4 | 0002 | 4 |
5 | 0002 | 5 |
6 | 0003 | 5 |
7 | 0004 | 5 |
tableB
id | shop_id | place_no |
---|---|---|
1 | 0001 | 1 |
2 | 0002 | 1 |
3 | 0003 | 3 |
4 | 0004 | 1 |
INNER JOIN で結合
(表示するものによって変わりますが、ちょっと省略)
id | shop_id | place_no | cate_no |
---|---|---|---|
1 | 0001 | 1 | 1 |
2 | 0001 | 1 | 3 |
3 | 0001 | 1 | 4 |
4 | 0002 | 1 | 4 |
5 | 0002 | 1 | 5 |
6 | 0003 | 3 | 5 |
7 | 0004 | 3 | 5 |
カテゴリ登録ひとつに対して、店舗データひとつ、という登録の仕方をしています。
つまり、0001番の店舗は、りんごとアイスとももを扱っているので、3件のデータが登録されている
ことになります。
別のテーブルで、地域の登録も行っています。(設計上で別テーブルにしています)
で、SQL文
>| GROUP BY sports_category.shop_id HAVING count( * ) > 1
SELECT * FROM tableA INNER JOIN tableB ON tableA.shop_id = tableB.shop_id
WHERE place_no = 1 AND cate_no=1 AND cate_no=3;