1 votes

Conception d'une base de données pour les regroupements personnalisés par l'utilisateur

Un utilisateur peut rechercher des couleurs et les ajouter à sa palette

Ainsi, s'ils écrivent bleu, le bleu apparaîtra et ils pourront l'ajouter.

ainsi de suite avec le rouge, le jaune.......

Mais je veux que, s'ils choisissent les "couleurs sombres", alors le gris, le noir et le marron devraient être ajoutés.

Aujourd'hui, je fais comme ça

if($color==darkcolor) 

insert black and grey and brown...

Existe-t-il un moyen plus simple d'y parvenir ? J'ai des centaines d'attributs que je veux ajouter et m'asseoir et écrire des chaînes php if, else est trop long...

1voto

Sarah Jamie Lewis Points 3244

Vous n'avez pas de problème spécifique à php/mysql ici.

Le mieux serait d'ajouter des attributs à votre base de données de couleurs.

par exemple

Name      Attribute
Green     Natural, Light
Brown     Natural, Dark

Vous pouvez simplement SELECT Name FROM Colours WHERE Attribute LIKE <Query String>

Si le nombre de catégories d'attributs est limité, vous pouvez spécialiser davantage le tableau en ajoutant des noms de colonnes tels que "Légèreté", "Thème", etc.

1voto

ceejayoz Points 85962

J'ai mis en place une base de données avec quelques tables.

colours
   id
   name

attributes
   id
   name

colour_attributes
   colour_id
   attribute_id

De cette façon, vous pouvez garder la trace d'un nombre illimité de couleurs et d'attributs, et lier les attributs aux couleurs via la table d'association. colour_attributes .

1voto

Eric Points 35647

Ajoutez un tableau de catégories, afin de pouvoir en garder la trace. Puis, ajoutez une table color_category afin d'avoir un many-to-many. Comme ça :

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

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

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

Ensuite, ayez un tableau UserPalette qui ressemble à ceci :

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

Ainsi, lorsqu'un utilisateur sélectionne dark vous devez exécuter cette requête :

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'

Pour récupérer les couleurs d'un utilisateur, vous devez faire ceci :

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

Si vous avez juste un nom d'utilisateur :

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'

Évidemment, assurez-vous de tout faire passer par mysql_real_escape_string() avant de le mettre dans une requête SQL. Sinon, vous vous exposez à des attaques par injection SQL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X