从数据库中检索数据并计算数据发生的次数

时间:2011-07-04 20:44:28

标签: php mysql arrays for-loop

我在MySQL中有几个表,我正在使用它没有任何关系。他们确实有一列类似的数据(邮政编码/邮政编码)。

我对这些表的处理方法是将一张表中的邮政编码与第一张表中的邮政编码进行比较并计算。

例如。

表A的邮政编码为T0A和T0B(我只使用邮政编码中的前三个字符,因为这是我需要比较的全部)

表B有13行,其中邮政编码与T0A匹配,3行邮政编码与T0B匹配。

结果如下:

T0A = 13
T0B = 3

然而,我需要把它们分开并按城市分开,所以既然T0A和T0B都可能是一个城市,我需要把它们加在一起然后得到类似的东西。

Edmonton = 16

我一直在使用for循环和数组。所以我将表A中的数据读入一个数组,将表b中的数据读入另一个数组。然后我使用嵌套for循环将表B中的邮政编码与表A中的邮政编码进行比较,以便计算邮政编码的出现次数,然后将它们存储在另一个数组中。这一切都很好,但现在我有点卡住试图将计数分成正确的城市,我坐在这里认为必须有一个更简单的方法来做到这一点。有没有人有任何建议,我发现这一切都错了吗?

结构 - 表A

jos_postalzip_redirect | CREATE TABLE `jos_postalzip_redirect` (
  `id` int(11) NOT NULL auto_increment,
  `country_code` varchar(2) NOT NULL,
  `prov_state_code` varchar(2) NOT NULL,
  `city` varchar(60) NOT NULL,
  `postal_zip` varchar(6) NOT NULL,
  `email_address` varchar(60) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=739 DEFAULT CHARSET=utf8 |

结构 - 表B

jos_form_submitteddata_form1 | CREATE TABLE `jos_form_submitteddata_form1` (
  `id` int(11) NOT NULL auto_increment,
  `bf_status` varchar(20) collate utf8_bin NOT NULL,
  `bf_user_id` int(11) NOT NULL,
  `FIELD_1` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_2` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_3` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_4` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_5` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_6` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_7` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_8` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_23` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_24` varchar(255) collate utf8_bin NOT NULL, //THIS IS THE POSTAL CODE FIELD
  `FIELD_28` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_29` varchar(255) collate utf8_bin NOT NULL,
  `FIELD_30` varchar(255) collate utf8_bin NOT NULL, 
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4044 DEFAULT CHARSET=utf8 COLLATE=utf8_bin 

1 个答案:

答案 0 :(得分:0)

只是对我所理解的东西的抽象。您可能需要根据需要进行调整。

在这个例子中,我假设表B中的FIELD_1是邮政编码。

按邮政编码计算:

select 
    left(ta.postal_zip, 3) p_code, count(*)
from 
    jos_form_submitteddata_form1 tb
    join jos_postalzip_redirect ta on left(tb.field_1, 3) = left(ta.postal_zip, 3)
group by
    p_code

按城市计算:

select
    ta.city, count(*)
from
    jos_form_submitteddata_form1 tb
    join jos_postalzip_redirect ta on left(tb.field_1, 3) = left(ta.postal_zip, 3)
group by 
    ta.city