【问题标题】:Designing a database for user-customized groupings为用户自定义分组设计数据库
【发布时间】:2009-08-29 21:07:16
【问题描述】:

用户可以搜索颜色并将它们添加到他们的调色板中......

所以如果他们写蓝色,蓝色就会出现并且他们可以添加它。

以此类推,红色、黄色......

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

今天我就是这样

if($color==darkcolor) 

insert black and grey and brown...

有没有更简单的方法来实现这一点。我有数百个属性我想添加并坐下来编写 php if,否则字符串非常耗时......

【问题讨论】:

    标签: php sql mysql database-design


    【解决方案1】:

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

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

    例如

    Name      Attribute
    Green     Natural, Light
    Brown     Natural, Dark
    

    你可以直接SELECT Name FROM Colours WHERE Attribute LIKE <Query String>

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

    【讨论】:

    • 好的。它比那更复杂。我得到了一个包含 2100 门学校课程的 xml 文件。用户可以添加到日程表中。问题是一个学期的 3 门课程可能被称为课程 A、B、C。但对于现实中的学生来说,它被称为课程 X 运行一个学期,而课程 X 包含那些 a、b、c 但没有永远记得他们的名字。我的梦想是拥有一个简单的后台管理表格。使 coursenname X 包含 a,b,c 使 coursename Z 包含 d,e,f
    • 颜色问题只是为了简单地说明问题,抱歉我的术语不好
    【解决方案2】:

    我会建立一个包含几张表的数据库。

    colours
       id
       name
    
    attributes
       id
       name
    
    colour_attributes
       colour_id
       attribute_id
    

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

    【讨论】:

      【解决方案3】:

      添加一个类别表,以便您可以跟踪它们。然后,添加一个 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 注入攻击。

      【讨论】:

        猜你喜欢
        • 2013-07-20
        • 2011-07-03
        • 1970-01-01
        • 2012-03-13
        • 2011-06-10
        • 2012-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多