Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从mysql中的类别部分创建列表_Php_Mysql_Arrays_Duplicates - Fatal编程技术网

Php 从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 正如您所看到的,它们的两行可能具有相同的类别。它们是否是一种检索结果的方法,其中数组只返回一次类别 我试图做的是获取数据库中的所有类别,以便稍后在代码中循环使用它们。例如,如果我想创建一个菜单,我希望菜单列出菜单中的所有类别 我知道我

我想知道mysql是否有办法查看一个列,并且只在找到一个唯一的列时检索结果。比如说

如果该表如下所示:

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-@RamRaider
distinct
是一些案例并不总是有效的。group by完美地完成了@Fred ii-请将此作为答案提交,以便我可以为您获得批准。我理解,因为这将创建一个更简单的案例。由于数据库已经列出了类别,因此要转换已列出此类别的20000多条记录就不那么容易了。除非您可以提供一个代码来转换现有列以引用单独的表,并用id号替换它,但我认为这将需要对stackoverflow提出不同的问题,因为它与当前的问题无关。@DEVPROCB。这将是另一个问题的候选人。