Kullanıcı özel gruplaşmalar için bir veritabanı tasarımı

3 Cevap php

Bir kullanıcı renkler için arama ve kendi paletine ekleyebilirsiniz ..

Onlar mavi yazarsanız Yani, mavi görünecektir ve bunu ekleyebilirsiniz.

böylece kırmızı, sarı ile .......

Ama onlar "koyu renkler" seçerseniz, o zaman siyah ve kahverengi eklenmelidir gri ki, istiyorum.

Bugün ben böyle yapıyorum

if($color==darkcolor) 

insert black and grey and brown...

Bunu başarmak için daha kolay bir yolu var mı. Ben eklemek istiyorum ve oturma ve başka dizeleri tüketen çok zaman olduğunu, eğer php yazılı nitelikleri yüzlerce var ...

3 Cevap

Burada, belirli bir php / mysql sorunu yok.

Yapabileceğiniz en iyi şey, renkli veritabanı özelliklerini eklemek olacaktır

örneğin

Name      Attribute
Green     Natural, Light
Brown     Natural, Dark

Eğer basitçe SELECT Name FROM Colours WHERE Attribute LIKE <Query String>

Öznitelik kategoriler sınırlı sayıda varsa, o zaman "Hafiflik", "Tema" vb sütun adlarını ekleyerek daha da tablo uzmanlaşmak olabilir

Ben birkaç tablo ile bir veri tabanı kurmak istiyorum.

colours
   id
   name

attributes
   id
   name

colour_attributes
   colour_id
   attribute_id

Bu şekilde, renkler ve niteliklerin sınırsız miktarda takip edebilir ve kravat dernek tablosu aracılığıyla renklerine bağlıyor colour_attributes.

Eğer onları takip böylece, bir kategori tablo ekleyin. Bir çok-çok olabilir böylece Sonra, bir color_category tablo ekleyin. Şöyle:

CategoryID    Category
----------------------
         1    primary
         2    dark

ColorID    CategoryID
---------------------
     1              1
     1              2
     2              2

ColorID    Color
-----------------
      1    red  
      2    brown

Sonra, şöyle bir UserPalette tablo var:

UserID    ColorID
-----------------
     1          3
     1          4

Yani, bir kullanıcının seçtiği dark, bu sorguyu çalıştırdığınızda ne zaman:

insert into userpalette
select
    $userId as userid,
    c.colorid
from
    category cat
    inner join color_category cc on
        cat.categoryid = cc.categoryid
    inner join colors c on
        cat.colorid = c.colorid
where
    cat.category = '$category'

Bir kullanıcının renk kapmak için, bunu yapmak istiyorum:

select
    c.color
from
    userpalette up
    inner join colors c on
        up.colorid = c.colorid
where
    up.userid = $userid

Sadece bir adı varsa:

select
    *
from
    users u
    inner join userpalette up on
        u.userid = up.userid
    inner join colors c on
        up.colorid = c.colorid
where
    u.username = '$username'

Bir SQL sorgusu içine koymadan önce Açıkçası, mysql_real_escape_string() ile emin boru her şeyi yapmak. Aksi takdirde, SQL enjeksiyon saldırıları için kendinizi açık gidiyoruz.