【问题标题】:Retrieve Data from Database and Count the number of times the data occurs从数据库中检索数据并计算数据出现的次数
【发布时间】:2011-09-28 09:20:10
【问题描述】:

我正在使用的 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 

【问题讨论】:

  • 能否提供表A和表B的结构?您可以运行SHOW CREATE TABLE table_name 来获取用于创建表的MySQL 语法(其中table_name 当然是要打印的表的名称)
  • 您能否澄清一下:您想在表 B 中查找表 A 中某处的所有邮政编码,并计算它们的出现次数,一次按邮政编码,一次按城市?
  • 表B中哪个字段是postal_code的字段?
  • 你能改进题名吗?我们从标签中知道它是关于 PHP 和 MySQL 的,我们知道它是关于“帮助”的,因为这是 Stack Overflow 并且......嗯......你还想要什么?香蕉?

标签: php mysql arrays for-loop


【解决方案1】:

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

在本例中,我假设表 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多