2016-08-13 70 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类别名称

希望这会有所帮助。

你甚至可以使用不同的类别。