Cevaplar
-
Her iki tabloda da arama yapacaksan many-to-many tablo yapısı işini görecektir. Plants alanınını atıp area_plants diye bir tablo daha yaratıp A ve B ile ilişkilendirebilirsin...
Ör:area_id | plant_id | sort_idx ----------------------------- 1 | 1 | 0 1 | 2 | 1 2 | 2 | 0 2 | 3 | 1
Bu tabloyu her iki tabloyla da join'le birleştirmek "like" ile arama yapmaktan daha mantıklı... -
Şuna ne dersiniz:
tablo: plants
plant_ID | name 1 | tree 2 | shrubbery 20 | notashrubbery
tablo: areas
area_ID | name 1 | forest
tablo: area_plant_map
area_ID | plant_ID | sequence 1 | 1 | 0 1 | 2 | 1 1 | 20 | 2
Normalize etmek dediğimiz olay...
Sorgulamak için de:
SELECT * FROM areas INNER JOIN area_plant_map ON areas.area_ID = area_plant_map.area_ID WHERE plant_ID = 2
-
many-to-many relationship yapmalısın
CREATE TABLE plant ( plant_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) ) ENGINE=INNODB; CREATE TABLE area ( area_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) ) ENGINE=INNODB; CREATE TABLE plant_area_xref ( plant_id INT NOT NULL, area_id INT NOT NULL, sort_idx INT NOT NULL, FOREIGN KEY (plant_id) REFERENCES plant(plant_id) ON DELETE CASCADE, FOREIGN KEY (area_id) REFERENCES area(area_id) ON DELETE CASCADE, PRIMARY KEY (plant_id, area_id, sort_idx) ) ENGINE=INNODB;
-
Merhaba,
Her ne kadar diğer arkadaşlar gibi bu iş için extra bir tablo daha oluşturmanın daha yerinde olacağını düşünsem de yeni bir tablo eklemeden mevcut sisteminiz üzerinde şu yöntemi kullanabilirsiniz:
2,20,1,2,2,20,1 şeklinde yazdığınız id numaraları içinde arama yaparken 2 aradığınızda 20 veya 22 gibi id lerinde bulunmaması için idleri tutacaginiz alanin içeriği virül ile başayıp virgül ile bitirin. yani idlerin başına ve sonuna birer tane virgül ekleyin. yeni değer aşağıdaki gibi olacaktır.
,2,20,1,2,2,20,1,
Bu noktadan sonra LIKE ile sorgularınızı yazarken idlerin önüne ve arkasına virgül koyarsınız o kadar.
Select * from tablo WHERE id LIKE ",2,"
bu şekilde 2 numaralı id yi seçmek isterken 22 veya 200 gibi idlerin seçilmesini engellemiş olacaksınız.
Kolay gelsin...