【发布时间】:2011-09-18 17:32:38
【问题描述】:
我有一个循环遍历正在进口的各种产品。在这个循环中,我还有一个 foreach,它遍历产品类的每个属性,并将文件中的值分配给当前实例的属性,以便稍后显示。
while(true)
{
$currentProduct = new productImport();
$line = fgets($fileHandle);
if($line == null) break;
$cells=explode(' ', $line);
$i=0;
foreach($currentProduct as &$ProductProperty)
{
if(isset($cells[$i]))
{
$ProductProperty = $cells[$i];
}
else return false;
$i++;
}
$AddedProducts[]=$currentProduct;
}
fclose($fileHandle);
return true;
既然我已经完成了这项工作,我想将其更改为创建一个表,除非已经存在,否则基于每个产品的一个属性。更具体地说,产品类包含值 $Vendor_Name;
使用 PDO(PHP 数据库对象),如果不存在名为 $Vendor_Name 的新表,我该如何创建并在其中放置值而不是该数组?
Edit: If it helps, the first value of each instance is a unique key.
【问题讨论】:
-
为什么要为每个供应商创建一个新表?如果每个供应商的大部分数据字段都相同,那么只需有一个供应商字段来指定每个产品“属于”谁?
-
很可能是因为我是一个 SQL 菜鸟。 ;p 有些供应商的产品很多,整个产品集约为 200,000 种,所以我认为它会加快网站搜索速度以将它们分开。你怎么看?
-
如果有的话,像这样分开只会减慢速度。关系数据库旨在快速对数据进行排序。只有当您的数据集变得非常庞大(即:数百万/数十亿行)时,才能在系统顶部添加您自己的分区语义。对于 20 万条记录,这是浪费时间。将索引添加到适当的字段(并且在“where”或“join”中使用的字段是候选字段)并且事情应该会飞起来。
-
我差不多明白你在说什么了,至少20万行是没问题的。如果有人想要特定供应商的所有结果,这是一项轻而易举的任务吗?不幸的是,你的最后一句话超出了我的想象……我想。目前每个产品都有一个唯一的供应商 ID、供应商名称和唯一的型号。这看起来够了吗?
-
一个简单的
select x,y,z from sometable where x=...对数据库来说没什么用。除非您的服务器功率不足并为 ram 启动,否则只要“x”字段上有索引,即使是数百万行也会快速压缩。