在PHP数据库查询中对项目进行分组

时间:2014-05-23 01:08:19

标签: php mysql

我认为这是一个相当简单的问题,但有点难以解释。

让我们从状态符号列表开始 - 状态标志,鲜花,鸟类等。我的MySQL数据库中的行将每个符号与其页面出现的URL相匹配。因此,如果字段Designation ='flower',那么URL将是arizona / flower,new-york / flower或类似的东西。

但是,有些州有不同类别的多个符号;例如两只状态的鸟,三种状态的鲜花等。让它更加混乱,我还没弄明白我是否应该在一个页面上描述所有州的花卉符号,或者为每个花卉符号制作一个独特的页面。

目前,我正在通过耳朵播放,如下面的数据库数据所示。在这个例子中,Arizona有两个花符号,每个花符号在同一页面上讨论(URL = arizona / flower)。

+----------+-----------------+-------------+
| State-ID | URL             | Designation |
+----------+-----------------+-------------+
| us-az    | arizona/flower  | flower      |
| us-az    | arizona/flower  | flower      |
| us-az    | arizona/tree    | tree        |
| us-fl    | florida/mammal  | mammal      |
| us-fl    | florida/mammal2 | mammal      |
| us-fl    | florida/mammal2 | mammal      |
| us-fl    | florida/mammal3 | mammal      |
| us-fl    | florida/bird    | bird        |
| us-fl    | florida/bird2   | bird        |
+----------+-----------------+-------------+

然而,佛罗里达州有四种官方哺乳动物。第一个(佛罗里达黑豹)被讨论@ mysite /佛罗里达/哺乳动物。这两种海洋哺乳动物在mysite /佛罗里达/哺乳动物2中进行了讨论,而国家马则以@ mysite / florida / mammal3为特色。

所以这是我的问题:我如何编写一个查询1)区分单个名称(例如亚利桑那州的州树)和多个名称(例如亚利桑那州的州花)和2)也告诉我多个名称是否与单个网址还是多个网址?

我需要一段时间才能解决所有问题,但是,现在,如果我的查询只列出多个网址,那将会非常有用。例如,它甚至不会显示亚利桑那州的州树。该查询可以作为我的符号列表的快照,帮助我识别所有多个名称,以及哪些名称链接到单个URL和多个URL。

我在Mac上使用PHP和MySQL。

P.S。我应该指出,还有其他字段,包括赋予符号特定值的字段(例如'佛罗里达黑豹','海牛','海豚','饼干马')。

2 个答案:

答案 0 :(得分:1)

您可以使用HAVING子句过滤聚合函数

SELECT State-ID, Designation, COUNT(*) AS cnt
FROM stateTable
GROUP BY State-ID,Designation
HAVING COUNT(*)>1

这将为您提供表中包含多行的所有State-ID,Designation组合。如果您还按网址分组,则可以确定他们是否共享网址。

基本上你应该阅读MySQL中的分组和聚合:12.15.1 GROUP BY (Aggregate) FunctionsMySQL SELECT Syntax

答案 1 :(得分:1)

SELECT `State-ID`, Designation, COUNT(*) all_count, COUNT(DISTINCT URL) url_count
FROM YourTable
GROUP BY `State-ID`, Designation

url_count会告诉您他们是否链接到相同的网址或不同的网址。您可以添加HAVING url_count > 1以仅将结果限制为链接到多个网址的项目。

相关问题