Php 从mysql中的类别部分创建列表
我想知道mysql是否有办法查看一个列,并且只在找到一个唯一的列时检索结果。比如说 如果该表如下所示:Php 从mysql中的类别部分创建列表,php,mysql,arrays,duplicates,Php,Mysql,Arrays,Duplicates,我想知道mysql是否有办法查看一个列,并且只在找到一个唯一的列时检索结果。比如说 如果该表如下所示: id name category 1 test Health 2 carl Health 3 bob Oscar 4 joe Technology 正如您所看到的,它们的两行可能具有相同的类别。它们是否是一种检索结果的方法,其中数组只返回一次类别 我试图做的是获取数据库中的所有类别,以便稍后在代码中循环使用它们。例如,如果我想创建一个菜单,我希望菜单列出菜单中的所有类别 我知道我
id name category
1 test Health
2 carl Health
3 bob Oscar
4 joe Technology
正如您所看到的,它们的两行可能具有相同的类别。它们是否是一种检索结果的方法,其中数组只返回一次类别
我试图做的是获取数据库中的所有类别,以便稍后在代码中循环使用它们。例如,如果我想创建一个菜单,我希望菜单列出菜单中的所有类别
我知道我能跑
SELECT categories FROM dbname
但这将返回重复的行,其中我只需要cateogray返回一次。在mysql端有没有办法做到这一点
我假设我可以使用php的array_unique()代码>
但是我觉得这会增加更多的开销,这不是MYSQL在后端可以做的吗?通过使用数据库规范化,您可以创建另一个具有唯一id和类别名称的表,并将这两个表链接在一起,如
从mytable1中选择*
在mytable1.cat=mytable2.id上
按mytable1.cat分组
当然,您也可以在没有多个表的情况下使用group by,但对于结构,我建议您这样做。您可以使用选择distinct
:
SELECT DISTINCT categories
FROM dbname ;
出于各种原因,最好有一个单独的参考表,每个类别有一行。这在很多方面都有帮助:
- 确保类别名称一致(例如“技术”与“技术”)
- 提供了一个很好的可用类别列表
- 确保类别保持不变,即使当前没有名称引用它
- 允许提供有关类别的其他信息,例如第一次出现时的信息或更长的描述
建议这样做。但是,如果您仍然希望保留该类别,我建议在dbname(categories)
上创建一个索引。查询应该利用索引
小组成员在Fred ii中工作完美-请将此作为答案提交,以便我能为您获得批准DEVPROCB
根据OP的要求:
您可以使用所选的按列分组
,以避免在查询结果中显示重复项
参考:
按类别名称从dbname组中选择id、名称
希望这会有所帮助
您甚至可以使用独特的类别 您可以使用GROUP BY col从表中选择不同的类别
?否我想要所有类别,但只需要返回数组来列出重复的类别一次。在mysql中,GROUPBY和distinct在性能上有区别吗@Fred ii-@RamRaiderdistinct
是一些案例并不总是有效的。group by完美地完成了@Fred ii-请将此作为答案提交,以便我可以为您获得批准。我理解,因为这将创建一个更简单的案例。由于数据库已经列出了类别,因此要转换已列出此类别的20000多条记录就不那么容易了。除非您可以提供一个代码来转换现有列以引用单独的表,并用id号替换它,但我认为这将需要对stackoverflow提出不同的问题,因为它与当前的问题无关。@DEVPROCB。这将是另一个问题的候选人。