为用户自定义分组设计数据库

时间:2009-08-29 21:07:16

标签: php sql mysql database-design

用户可以搜索颜色并将其添加到调色板中。

因此,如果他们写蓝色,蓝色将显示,他们可以添加它。

等等,红色,黄色.......

但是我想,如果他们选择“深色”,那么应该添加灰黑色和棕色。

今天我这样做

if($color==darkcolor) 

insert black and grey and brown...

有没有更简单的方法来实现这一目标。我有几百个属性我想添加,坐着写php,否则字符串耗费时间很长......

3 个答案:

答案 0 :(得分:1)

这里没有特定的php / mysql问题。

最好的办法是将属性添加到颜色数据库

e.g。

Name      Attribute
Green     Natural, Light
Brown     Natural, Dark

你可以简单地SELECT Name FROM Colours WHERE Attribute LIKE <Query String>

如果属性类别数量有限,那么您可以通过添加“Lightness”,“Theme”等列名来进一步专门化表格。

答案 1 :(得分:1)

我建立了一个包含几张桌子的数据库。

colours
   id
   name

attributes
   id
   name

colour_attributes
   colour_id
   attribute_id

这样,您可以跟踪无限量的颜色和属性,并通过关联表colour_attributes将属性与颜色联系起来。

答案 2 :(得分:1)

添加类别表,以便您可以跟踪它们。然后,添加一个color_category表,以便您可以拥有多对多。像这样:

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

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

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

接下来,让UserPalette表看起来像这样:

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

因此,当用户选择dark时,您将运行此查询:

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'

要获取用户的颜色,请执行以下操作:

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

如果您只有一个用户名:

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'

显然,在将其放入SQL查询之前,请确保通过mysql_real_escape_string()管道所有内容。否则,你会让自己开放SQL注入攻击。