2016-08-13 62 views
1

我想知道如果MySQL有一種方法來查看一列,並只發現一次唯一的列檢索結果。例如創建一個列表從一個類別部分在mysql

如果表是這樣的:

id name category 
1 test Health 
2 carl Health 
3 bob Oscar 
4 joe Technology 

正如你可以看到他們是可以有同一類別的兩個行。他們的方式來檢索結果數組將只返回一個類別的結果?

我想要做的是獲取數據庫中的所有類別,以便稍後在代碼中循環使用它們並使用它們。例如,如果我想創建一個菜單,我想要菜單列出菜單中的所有類別。

我知道我可以運行

SELECT categories FROM dbname 

但這返回重複行,我只需要cateogry返回一次。有沒有辦法在MySQL端做到這一點?

我以爲我可以只使用PHP的array_unique();

,但我喜歡這種感覺增加了更多的開銷,這是不是MYSQL可以在後端做什麼?

+0

您可以使用GROUP BY col –

+0

'從表中選擇不同的類別? – RamRaider

+0

不,我想要所有的類別,但只需要返回的數組一次列出重複的類別。 mysql中的group by和distinct有什麼不同? @ Fred-ii- – DEVPROCB

回答

0

通過使用數據庫規範化,您可以創建另一個表具有唯一ID和類別名稱,並通過該鏈接這兩個在一起,就像

SELECT * FROM上mytable1.cat MYTABLE1 = mytable2.id 組通過mytable1.cat

你也可以使用沒有多個表的組,但對於結構,我建議這樣做。

0

您可以使用select distinct

SELECT DISTINCT categories 
FROM dbname ; 

由於各種原因,這是一個好主意,有一個單獨的參考表,每個類別一行。這在很多方面都有幫助:

  • 確保類別名稱一致(例如「技術」與「技術」)。
  • 給出一個很好的可用類別列表。
  • 確保類別不變,即使沒有名稱當前引用它。
  • 允許您提供有關類別的其他信息,例如首次出現或更長的說明。

這是推薦的。但是,如果您仍然希望保留此類別,我會建議您使用dbname(categories)的索引。查詢應該利用索引。

+0

據我所知,這將創造一個更容易的情況。因爲數據庫已經列出了類別,所以對於已經列出的20000條記錄進行轉換並不容易。除非你可以提供一個代碼,可以翻譯現有的專欄來引用單獨的表格,並用id號代替它,但我會認爲這將需要在stackoverflow上提出一個不同的問題,因爲它與當前問題無關。 – DEVPROCB

+0

@DEVPROCB。 。 。這將是另一個問題的候選人。 –

0

SELECT ID,名稱來自DBNAME GROUP BY類別名稱

希望這會有所幫助。

你甚至可以使用不同的類別。