2009-08-29 28 views
1

用戶可以搜索的色彩,並將它們添加到自己的調色板數據庫..設計爲用戶定製的分組

所以,如果他們寫藍色,藍色會顯示出來,他們可以添加它。

等以紅,黃.......

但我想,如果他們選擇「深色」,然後灰黑色和棕色應予以補充。

今天I'm做這樣

if($color==darkcolor) 

insert black and grey and brown... 

有沒有更簡單的方式來實現這一目標。我有幾百個屬性,我想添加和坐和寫PHP如果,否則字符串要花費很多時間...

回答

1

你沒有一個特定的PHP/MySQL的問題在這裏。

您最好的選擇是將屬性添加到您的色彩數據庫

例如

Name  Attribute 
Green  Natural, Light 
Brown  Natural, Dark 

的,你可以簡單地SELECT Name FROM Colours WHERE Attribute LIKE <Query String>

如果有屬性類別的數量有限,那麼你可以通過添加列的名稱,如「輕」,「主題」等進一步專注表

+0

好的。那比較複雜。我已經獲得了2100個學校課程的XML文件..該用戶可以添加到時間表。問題在於一個學期的三門課程可能被稱爲課程A,B,C ..但是對於現實中的學生來說,它被稱爲課程X,它運行一個學期,而課程X包含那些a,b,c但是沒有永遠記得他們的名字。 我的夢想是要有一個簡單的後臺管理表單來說。 使coursenname X包含a,b,c 使coursename Z包含d,e,f – user165445 2009-08-29 21:18:43

+0

顏色問題只是用簡單的方式來說明問題,抱歉我的壞詞彙 – user165445 2009-08-29 21:19:38

1

我會建立一個有幾張表的數據庫。

colours 
    id 
    name 

attributes 
    id 
    name 

colour_attributes 
    colour_id 
    attribute_id 

這樣一來,你可以跟蹤的顏色和屬性的無限量的,和領帶通過關聯表colour_attributes屬性的顏色。

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' 

顯然,通過mysql_real_escape_string()確保你管一切,你把它放到一個SQL查詢之前。否則,你會打開SQL注入攻擊。