我有一个产品表、一个印记表、一个制造商表和一个成分表 - 以及其他表。
我当前正在生成信息并使用所谓的“file_name”作为 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 个项目后,我想像这样显示:
“您检查的所有版本的产品都含有以下成分:” (所有所选产品共有的成分)。
乙酰氨基酚、纤维素、玉米、交聚维酮、氢可酮酒石酸氢盐、微晶、淀粉和硬脂酸
(显示每个产品中并非所有人共有的成分。 最终结果在列中)
“此外,您选择的每种产品都含有以下成分:”
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
配料表:20000行,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、19_gred、20_gred(等等) 43_gred)
问题是如何以及使用什么方法来获取我所需的成分格式。我有开发注册系统的经验,对 PHP 有相当的了解,并且开始习惯 PDO。我的 Sql 经验很少,基本上是在“需要知道”的基础上。
我想知道我是否应该专注于 MySQL 查询的怪物,或者更多地关注 php 方面。我考虑过一个查询,给出所有 3 种药物共有的成分,然后从每个单独的药物列表中减去该结果以获得第二部分,但这似乎是相当高级的 mysql - 特别是因为我需要数据从行布局切换到列布局。有什么帮助吗?
另一个想法是执行一个查询,连接每行的成分,然后在 php 端执行数组过程。问题是,我很难找到正确的代码来从每行中提取成分,因为与“已使用”字段相比,“NULL”字段的数量因每行而异。 (如何计算 PDO 查询中的空列?我已经尝试过获取表中列的完整计数。)
对我来说,这是一个需要几个步骤的脑筋急转弯。我正在寻找“神奇的”MySql 代码(如果存在)和/或关于您将采用哪种方法(使用 php、mysql、PDO)的建议。
感谢您的兴趣/帮助! 劳拉
我找到了一种 php 方法来完成我需要的事情。我确信有更快的 MySql 方式。如果您知道请分享!劳拉
首先,我将 Mysql 空值设置为默认为“no_ingre”。
然后我对这 3 个选择执行了 3 次以下代码: SELECT '所有成分字段 WHERE id=$name_of_id'
$result=$stmt->fetch(PDO::FETCH_ASSOC);
foreach($result as $key => $value) {
if ($value == "no_ingre") unset($result[$key]);
}
找到所有人都常见的成分:
$same_detect= array_intersect($result, $result2, $result3);
$p_same=(implode(", ", $same_detect));
echo "<br />The below ingredients are in all of the chosen products<br />";
echo $p_same;
要找到所有人都不常见的:执行以下代码 3 次(针对每个成分数组):
foreach ($result as $item) {
if (!in_array($item, $same_detect, true)) {
echo ("<tr><td>" . $item . "</td></tr>"); }