0

我有以下代码和数据库。我的意图是最终用户可以从数据库中选择列(通过'ajax'ing选项/直接从mysql中选择)并对其运行报告。我可以预先确定他们使用的表格,他们选择列。我最大的问题是执行“计划”查询的最佳方式。

要运行计划,我需要来自“客户”和“交货”的详细信息 - (客户信息和交货地址),我使用所有表格中的“客户编号”,加上年份,来选择要运行的年度计划 - 即客户编号 bar12345 - 年度计划表是 bar123452012

从 bar123452012 表中提取的每个“custnum”可能有 2 个产品。

此表每个产品只有一行,但有 367 列,1-prodid,366 列以 yday 整数为标题。php 计算出它是否需要在那一年在不同的函数中使用 365 或 366。

你有什么建议?一个 php 循环,一个一个地拉所有客户并在一个表中格式化,或者是否有一个 SQL 查询将根据 tindex 将不同的表左连接到每一行。2012身份证?!需要速度和效率,因为我们正在谈论至少 200 个客户表,可能多达 1000 个。

感谢 Dwurf 的现实检查。重组数据库以拥有一个时间表,并以此为基础工作。

谢谢矮人。整个下午都在进行新设计... 数据库

表客户的表结构

custnum varchar(255) 没有
姓氏 varchar(50) 没有
名字 varchar(50) 没有
phone1 varchar(50) 没有
phone2 varchar(50) 没有
email varchar(50) 没有
add1 varchar(50) 没有
add2 varchar(50) 没有
city varchar (50) 无
邮政编码 varchar(10) 无

表交付详细信息的表结构

special varchar(50) 否
add1 varchar(50) 否
add2 varchar(50) 否
city varchar(50) 否
postcode varchar(10) 否
custnum varchar(100) 否

表格注释的表格结构

custnum varchar(50) 无
注释 varchar(50) 无
时间时间戳 无 CURRENT_TIMESTAMP

表 prodgroup 的表结构

pgroup varchar(20) 无
名称 varchar(50) 无
描述 varchar(50) 无

表产品的表结构

name varchar(50) 没有
数量 varchar(50) 没有
描述 varchar(50) 没有
pgroup varchar(50) 没有
价格 varchar(50) 没有
图片 varchar(100) 没有
productid varchar(10) 没有
suppid varchar(50) 没有
vat tinyint (1) 没有

表计划的表结构

productid varchar(15) 否

d0 varchar(100) 否
d1 varchar(100) 是 NULL d2 varchar(100) 是 NULL ...... d362 varchar(100) 是 NULL d363 varchar(100) 是 NULL d364 varchar(100) 是 NULL d365 varchar (100) 是 NULL

custnum varchar(50) 否

id int(50) 否

表供应商的表结构

suppid varchar(50) 没有
name varchar(50) 没有
phone1 int(100) 没有
phone2 int(100) 没有
email varchar(100) 没有
add1 varchar(50) 没有
add2 varchar(50) 没有
city varchar(50) 没有
邮政编码 varchar (10) 无
说明 varchar(100) 无

表 vatgroup 的表结构

vat int(20) 无
金额 decimal(20,0) 无
描述 varchar(20) 无

4

1 回答 1

0

你有什么建议?一个 php 循环,一个一个地拉所有客户并在表格中格式化,

这种方法是自杀的性能

或者是否有一个 SQL 查询会根据 tindex 将不同的表左连接到每一行。2012身份证?!

对于您在问题中概述的设计,这实际上是不可能的。但是,设计更改可能会有所帮助:如果您的所有报告都有一个表格,并且为报告名称添加一列,那么您会更接近一些。考虑类似的事情:

Table structure for table Reports
custnum varchar(255) No
productid   varchar(15) No  
date  DateTime    No  

现在您可以构造一个查询来获取特定客户的所有行

select * from Reports 
where date between '2012-01-01' and '2013-01-01'
and custnum = 'bob54326'

使用 PHP(或您正在使用的任何工具)从这些结果中生成表格。

我知道这种策略会破坏您的“从 UI 直接访问表”模型,但恐怕该模型根本不能很好地工作。更改您的设计以使用您拥有的工具,而不是试图强制工具符合您的设计。

于 2012-04-26T15:36:59.683 回答