计算DISTINCT多个mysql行查询

时间:2012-03-17 07:52:40

标签: php mysql count

我使用多种方法在mysql表行中插入数据:1#2#3。 1是国家的ID,2是国家的ID,3是市镇的ID。现在我有这张桌子的房地产列表。对于每个列表(家)我有国家/州/镇(1#2#3)。在国家表中我有国家列表 - 在国家表中我有州名单 - 在国家表我有镇的名单。我需要在国家/州/镇的房屋数量。我的意思是:

USA [ 13 ] <!-- This Is equal of alabama+alaska+arizona -->
----Alabama [8] <!-- This Is equal of Adamsville+Addison+Akron -->
-------Adamsville [2]
-------Addison[5]
-------Akron[1] 
......(list of other City)
----Alaska [ 3 ]
-------Avondale[3]
......(list of other City)
----Arizona [ 2 ]
-------College[2]
......(list of other City)

Lisintg表:

ID -- NAME -- LOCATION -- DATEJOIN -- ACTIVE
 1 -- TEST -- 1#2#3    -- 20110101 -- 1
 2 -- TEST1 -- 1#2#3    -- 20110101 -- 1
 3 -- TEST2 -- 1#3#5    -- 20110101 -- 1
 4 -- TEST3 -- 1#7#6    -- 20110101 -- 1

国家/地区表:

 id       -- name  
 1        -- USA  

统计表:

id        -- countryid -- name  
 1        -- 1         -- albama
 2        -- 1         -- alaska
 3        -- 1         -- akron

城镇表:

id        -- countryid -- statsid   -- name  
 1        -- 1         -- 1         -- adamsville
 2        -- 1         -- 1         -- addison 
 3        -- 1         -- 1         -- akron

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我不知道您的表架构,但您可以尝试:

SELECT count(DISTINCT country_name) FROM `tbl_country`

count()函数将返回行数

答案 1 :(得分:0)

我不认为您的架构是理想的,您应该考虑更改它。

  • 列表中的您的位置字段不止一件事。也许它应该只存储城镇ID,因为你可以从中找出州和国家吗?
  • 您的其他表中的“选择器”列名称错误。这些是什么?它们是其他表中的ID的外键引用吗?如果是这样,请将其命名为。

所以我认为你想要实现的是每个地理区域中所有不同列表的总和。如果是这样,你应该调查SELECT...GROUP BY。像这样的东西

SELECT location,count(*)
FROM listings
GROUP BY location

这将为您提供每个不同位置的列表以及它在列表中显示的次数。