不動産屋さんには複数のタグが付くかもしれないし、同じタグが複数の不動産屋さんにつくかもしれませんよね?
そんな場合は中間テーブルを使って、多対多結合を表現するのがベストプラクティスです。
多対多結合ついて詳しくはググってください。
以下の3つのテーブルがあったとして
estatesテーブル
id(主キー)
name(ユニーク)
tagsテーブル
id (主キー)
name(ユニーク)
estates_tagsテーブル
tag_id(主キー)
estate_id(主キー)
SQLはこんな感じで
SQL
1SELECT estates.name
2FROM estates
3INNER JOIN estates_tags
4 ON estates_tags.estate_id = estates.id
5INNER JOIN tags
6 ON estates_tags.tag_id = tags.id
7WHERE tags.name = "神奈川県" OR tags.name = "ペット可"
8GROUP BY estates.name
9HAVING COUNT(0) = 2
テーブルも追記します。
SQL
1CREATE TABLE estates(id int PRIMARY KEY, name varchar(255) UNIQUE);
2
3CREATE TABLE tags(id int PRIMARY KEY, name varchar(255) UNIQUE);
4
5CREATE TABLE estates_tags(
6 estate_id int NOT NULL,
7 tag_id int NOT NULL,
8 PRIMARY KEY(estate_id, tag_id),
9 FOREIGN KEY(estate_id) REFERENCES estates(id),
10 FOREIGN KEY(tag_id) REFERENCES tags(id));
11
12INSERT INTO estates (id, name)
13 VALUES (1, 'サンプル建設'), (2, 'サンプル不動産');
14
15INSERT INTO tags (id, name)
16 VALUES (1, '神奈川県'), (2, 'ペット可'), (3, '東京都');
17
18INSERT INTO estates_tags(estate_id, tag_id)
19VALUES (1, 1), (1, 2), (2, 3), (2, 2)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/25 00:41