2012-10-02 62 views
0

這是我的數據的MySQL返回所有結果,而無需複製數據

id   cost cat   foreign  colours 
-------------------------------------------------------- 
385_white 99  swarovski 12   black;blue 
386_white 99  swarovski 12   black;blue;green 
387_white 99  swarovski 12   yellow;green 
389_white 99  swarovski 12   white;silver 
385_white 99  swarovski 12   silver 

這是我的查詢

$checkSQL=mysql_query("SELECT * FROM `products`"); 
while($r = mysql_fetch_assoc($checkSQL)) { 

    echo '<ul class="ColourList">'; 
    $cols = explode(';', $r['colours']); 
    foreach ($cols as $col){ 
     echo '<li class="' . $col . '">' . $col . '</li>'; 
    } 
    echo '</ul>'; 
} 

這基本上返回的顏色列表爲每個記錄

<ul> 
<li>black</li> 
<li>blue</li> 
</ul> 

然而我想返回一個單獨的列表,對於整個數據庫中的每種顏色和字母順序。所以基本上所有的顏色都可以在所有行中按照ABC順序拆分成一個列表,但沒有它們重複 - 這可能與我的客戶端設置有關嗎?只需要一些方向?想着explodereplace然後我們用ORDER BY ASC命令?

+1

是否允許DB標準化?如果是的話,我建議創建兩個新表:'顏色(colorId,colorName)'和'products_colors(productId參數,colorId)'到相關的產品和顏色可供選擇。 –

+2

最好的是使用適當的實體關係,沒有一個字符串:( – ajreal

回答

3

這是一個很好的例子,如果你不規範你的數據庫會發生什麼情況。起初看起來很簡單,但稍後會遇到麻煩。

改變你的表是這樣的:

產品:

id   cost cat   foreign  
-------------------------------------------- 
385_white 99  swarovski 12  

ProductColors:

id   color_id  
---------------------- 
385_white 1     
385_white 2 

顏色:

id   name  
---------------------- 
1   Black  
2   Blue 

如果你有這樣的結構,非常輕鬆查詢數據庫,你想要什麼。

例子:

要查詢所有可用的顏色:

select * from colors 

要查詢所有可用的顏色385_white

select * from productcolors where id = '385_white' 
+0

這就是我們最終做的事情。基本上規範化數據。看到解決方案無論如何已經完成了這一點會很有趣 – TheBlackBenzKid

+0

你會結束。爬行到數據的無窮量 – JvdBerg

1

的SQL運行一次,所以這

思維爆炸機智h替換,然後我們ORDER BY ASC命令?

無法完成。

試試這個SQL

SELECT * FROM `products` ORDER BY colours GROUP BY colours 

這將通過顏色的字母順序排序,然後按顏色組將刪除你說的重複。

您還應該將數據重構爲顏色的一對多關係,但使用;作爲分隔符並不好,您以後會遇到真正的麻煩。

+1

的'GROUP BY colours'子句不會刪除重複例如下列值是不同的,產生顏色的重複:'黑色; blue'和'黑色,藍色; green' –

+0

鑑於魯鈍性質表的,其最好的OP是會得到。 –

+0

@ADC我們已經結束了做基本上是標準化數據。看到解決反正已經這樣做了會很有趣 – TheBlackBenzKid

0

如果您經常需要在「顏色」字段上運行查詢(而不是簡單的SELECT *用於原始顯示),這意味着您的字段應設計爲易於查詢。

這意味着:不要多個條目店內1場,它會使你需要查詢和提取的東西你的生活艱苦每次。

相反,創建一個 '顏色' 表(colour_id採用,colour_name)

和 'articlecolors' 表(article_id的,colour_id採用)。

這樣,每一篇文章仍然可以有多種顏色,而且它變得更容易增添新的色彩。 而且,您將能夠使用標準SQL運行關於文章顏色的任何查詢:檢索顏色列表而不重複將像「SELECT DISTINCT(colour_name)FROM colors'一樣簡單'

相關問題