2017-08-30 94 views
0

我有一個關於顯示某些數據訂單的問題。我從數據庫創建了顏色表。有256行和名稱的顏色。數據庫行看起來像他的:https://prnt.sc/geyp48,我想顯示像這樣的屏幕https://prnt.sc/geypbr顯示帖子某些命令

現在所有顏色有14個不同的代碼。例如,紅色有14種不同的顏色類型。

我想按14順序顯示它們中的每一個。

<div class="red">All in 14 different red color code</div> 
<div class="blue">All in 14 different blue color code</div> 
<div class="gren">All in 14 different green color code</div> 
<!--All others will be come here--> 

我知道我可以這樣給它的第14

$query = mysqli_query($this->db,"SELECT id, colors, color_name FROM colors WHERE id ORDER BY id ASC LIMIT 0,14") or die(mysqli_error($this->db)); 

但是,如果使用ASC LIMIT 0,14我應該爲所有其他14色代碼中創建很多關於它的查詢。

我的問題是,我如何以不同的順序顯示每14格。

+0

要用你當前的表處理這個問題,我認爲你需要在'ORDER BY'子句中使用一組嚴重醜陋的'CASE'表達式。如果您真的有這種長期需求,我建議爲可見光的每種顏色創建一個波長或頻率列。然後,你可以很容易地使用它來排序。也許十六進制代碼已經可以做到這一點。 –

回答

2

您不應該ORDER BY ID。這使得順序取決於插入順序,這在我看來非常脆弱。您可以通過顏色代碼進行訂購,假設每個顏色代碼都以相同的「顏色類別」開頭,但又非常脆弱。

你應該做的是正常化。添加一個新表,color_category您添加每種顏色。然後通過外鍵爲每行分配一個顏色類別。它也可以是顏色類別的VARCHAR()列,但從長遠來看,這可能會讓您頭痛(不同的顏色拼寫等)。所以請嘗試使用新表對其進行標準化。然後你可以JOIN它到原來的表格來獲取每一行的顏色類別。事情是這樣的:

tables schema

所以,當你有,你可以ORDER BY color_category_id,並在你的代碼,而迭代,檢測時color_category更改,然後開始一個新的DIV或任何你需要做的。