【问题标题】:How to create new tables with PHP in MySQL?如何在 MySQL 中使用 PHP 创建新表?
【发布时间】: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”字段上有索引,即使是数百万行也会快速压缩。

标签: php database foreach pdo


【解决方案1】:

PHP 有一个可以帮助您创建表的对象,并有一个附加参数“IF NOT EXISTS”表示“如果表不存在,则创建它”。

下面是代码语法:

CREATE TABLE IF NOT EXISTS `" . $Vendor_Name . "` (
`media_id` int(11) NOT NULL AUTO_INCREMENT,
`filename` varchar(50) NOT NULL,
`thumb` varchar(50) NOT NULL,
PRIMARY KEY (`media_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

【讨论】:

  • 这在某种程度上是有帮助的开始 :) 如果您知道如何在上述 foreach 循环的上下文中使用 PDO 时具体地结合这个相同的概念,您介意编辑这个吗?
  • 原理一模一样。只需将我添加的代码添加到 $query 变量中,然后执行 mysql_query($query);
  • mysql_query($query) != PDO 风格 =/
  • 对不起,我的错。假设您已经初始化了 PDO,只需执行以下操作: $rows = $dbh->exec($query);
猜你喜欢
  • 2017-01-10
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多