【发布时间】:2011-07-08 10:28:11
【问题描述】:
我有一个产品表、一个印记表、一个制造商表和一个成分表 - 以及其他表。
我目前正在生成信息并使用所谓的“文件名”作为 ID(它是 FDA 分配的 36-40 位数字 ID,与每个产品一起使用)。现在发生的事情是人们输入几个字母,自动完成下拉菜单提供了准确的拼写。当他们单击提交时,它会显示所有匹配的条目。如果他们选择通用产品,它还包括“品牌”产品 - 如果他们输入品牌,它还包括通用产品。
当前显示如下:
Sold by: Sold using Available Chemical name Data based
name Since: on company
report submitted:
C----- Health Lortab 2011-01-13 Hydrocodone Bitartrate etc 2010-12-07
R—Distributors Hydrocodone 2010-02-18 Hydrocodone Bitartrate etc 2009-12-17
Bitartrate
And Acetaminophen
C-- Health Vicodin 1983-01-07 Hydrocodone Bitartrate etc 2009-11-03
R—Distributors Hydrocodone 2010-07-30 Hydrocodone Bitartrate etc 2010-12-28
Bitartrate
And Acetaminophen
这工作正常。我将在左侧添加一个复选框,最多可以选择 3 种产品进行比较和其他信息。
下一步:
在他们检查 1、2 或 3 个项目后,我想显示如下:
“您检查的所有产品版本都包含以下成分:” (所有所选产品共有的成分)。
对乙酰氨基酚、纤维素、玉米、交联聚维酮、氢可酮重酒石酸盐、微晶、淀粉和硬脂酸
(显示并非所有人都持有的每种产品中的成分。 最终结果为 COLUMNS)
“此外,您选择的每种产品都含有以下成分:”
COLUMN 1(Product 1) COLUMN 2 (Product 2) COLUMN 3 ( Product 3)
COPOVIDONE MAGNESIUM STEARATE CROSCARMELLOSE SODIUM
CROSCARMELLOSE SODIUM POVIDONE D&C YELLOW NO. 10
D&C RED NO. 27 SILICON DIOXIDE FD&C BLUE NO. 1
D&C RED NO. 30 POVIDONE
HYDRATED SILICA SILICON DIOXIDE
MAGNESIUM STEARATE SUCROSE
显示结束
成分表:有 20,000 行,46 列。每行是一种不同的药物,包含 id、文件名和成分,每种药物(行)都有不同的成分组合和数量。未使用的字段被标记为“Null”;:
每行的成分列:
id,文件名,0_gred,1_gred,2_gred,3_gred,4_gred,5_gred,6_gred,7_gred,8_gred,9_gred,10_gred,11_gred,12_gred,13_gred,14_gred,15_gred,16_gred,17_gred,18_gred等18_gred,18_gred 43_gred)
问题是如何以及使用什么方法来获得我需要的成分格式。我有开发注册系统的经验,我对 PHP 相当了解,并且开始使用 PDO。我的 Sql 经验很少,基本上是在“需要知道”的基础上。
我想知道我是否应该专注于 MySQL 查询的怪物或更多的 php 方面。我考虑了一个查询,给出所有 3 种共有成分,然后从每个单独的药物列表中减去该结果以获得第二部分,但这似乎是非常高级的 mysql——尤其是因为我需要将数据从行布局切换到列布局。有什么帮助吗?
另一个想法是做一个连接每行成分的查询,然后在 php 端执行数组过程。问题,我很难找到正确的代码来从每一行中提取成分,因为与“使用”字段相比,“NULL”字段的数量随每一行而变化。 (如何在 PDO 查询中计算空列?我已经尝试获取表中列的完整计数。)
对我来说,这是一个包含几个步骤的脑筋急转弯。我正在寻找“神奇”的 MySql 代码(如果存在)和/或关于您将采用哪种方法(使用 php、mysql、PDO)的建议。
感谢您的兴趣/帮助! 劳拉
【问题讨论】:
-
你当然需要先规范化表格。首先,请参阅:databases.about.com/od/specificproducts/a/firstnormalform.htm
-
或者 TsackOverflow 上的这个例子(读取 43 而不是动态):stackoverflow.com/questions/439656/…
-
是的,ypercube,我想知道这一点。此表是由 file_name 连接的较大表组的一部分。我设置了自动从下载的 xml 文档 (FDA) 中提取此数据的编码。 (换句话说,有一个单独的 PRODUCT 表,它通过 file_name 链接到 INGREDIENTS。(20,000 条记录)。如何以自动方式标准化,因为每次更新都会改变成分?
-
我认为 ypercube 的意思是您需要一张表用于产品,另一张表用于成分FoundInProducts,另一张表用于成分描述。在产品中,您将只有与所有产品相关的通用信息,例如价格、库存数量、剂量等,以及唯一的 product_id。在 ingredientsFoundInProducts 中,每一行都有一个产品 ID 和一个由成分 ID 调用的成分。最后, ingredientsDescription 将包含所有成分共有的成分信息,例如 id、成分名称、分子量等。
-
谢谢 Mike - 请原谅我不够清楚。这是我的第一个“帖子”(请原谅双关语)!我已经编辑了帖子以显示是什么。不幸的是,我没有资格发布可以更容易解释的屏幕截图。劳拉