Разработка базы данных для пользовательских группировок - PullRequest
1 голос
/ 30 августа 2009

Пользователь может искать цвета и добавлять их в свою палитру.

Так что, если они напишут синий, появится синий, и они могут добавить его.

с красным, желтым .......

Но я хочу, чтобы, если они выбирают "темные цвета", то нужно добавить серый черный и коричневый.

Сегодня я делаю вот так

if($color==darkcolor) 

insert black and grey and brown...

Есть ли более простой способ добиться этого. У меня есть сотни атрибутов, которые я хочу добавить, сидя и записывая php, если строки занимают много времени ...

Ответы [ 3 ]

1 голос
/ 30 августа 2009

Я бы создал базу данных с несколькими таблицами.

colours
   id
   name

attributes
   id
   name

colour_attributes
   colour_id
   attribute_id

Таким образом, вы можете отслеживать неограниченное количество цветов и атрибутов и привязывать атрибуты к цветам через таблицу ассоциаций colour_attributes.

1 голос
/ 30 августа 2009

Добавьте таблицу категорий, чтобы вы могли отслеживать их. Затем добавьте таблицу 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-инъекций.

1 голос
/ 30 августа 2009

У вас нет особых проблем с php / mysql.

Лучше всего добавить атрибуты в базу данных цветов

, например

Name      Attribute
Green     Natural, Light
Brown     Natural, Dark

Вы можете просто SELECT Name FROM Colours WHERE Attribute LIKE <Query String>

Если количество категорий атрибутов ограничено, вы можете дополнительно специализировать таблицу, добавив имена столбцов, такие как «Lightness», «Theme» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...