Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Sayılardan oluşan bir array'i MySQL'de tutmanın en doğru yolu nedir?

İki tane tablom var:

A:

plant_ID | name 1 | cam 2 | kavak 20 | mese

B:

area_ID | name | plants 1 | orman | *buraya_ne_gelsin*

B tablosunda bir ya da birden fazla sayıda ağaç tutmak istiyorum. Sıralama önemli, ayrıca bir ağaç birden fazla sayıda gösterilebilir. Ör: 2,20,1,2,2,20,1

Bunu yapmanın en uygun şekli nedir? Burada karışan nokta, örneğin 2 no.lu ağacı aradığımda 20'lerin gelmemesi gerek... Sorgulamayı nası yapabilirim? Başına 0 mı eklemeliyim?
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Cevaplar

  • paul-sasik adlı üyenin fotoğrafı
    13 yıl önce yazılmış
    1 cevap - 0 soru
    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ı...
  • mgroves adlı üyenin fotoğrafı
    13 yıl önce yazılmış
    1 cevap - 0 soru
    Ş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
  • richard-knop adlı üyenin fotoğrafı
    13 yıl önce yazılmış
    1 cevap - 0 soru
    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;
  • 1
    Jumper adlı üyenin fotoğrafı
    13 yıl önce yazılmış
    4 cevap - 0 soru
    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...