允许用户管理大量数据库行的最佳方法

时间:2011-12-04 00:12:28

标签: php mysql

我有两个大表,如下:

第一张表:

  • tbl_properties
    • ID
    • 地址
    • 城市
    • 状态
    • 拉链
    • 时间戳

第二张表:

  • tbl_units
    • ID
    • propertyID(将单位与属性相关联)
    • 的unitName
    • 时间戳

基本上我正试图在用户层面找到管理这个(有时是巨大的)属性和单元列表的最佳方法。这包括:

  1. 许多属性和单位的初始上传(我想象用户可以从Excel复制和粘贴,例如......但我无法弄清楚如何在后端正确解析信息)。< / LI>
  2. 批量编辑属性/单位。
  3. 批量添加或删除某个属性的单位。
  4. 有什么想法吗? 1号是我遇到的最大问题......

2 个答案:

答案 0 :(得分:1)

要让用户一次上传多个属性,您可以使用csv个文件。 您必须为所有用户必须遵循的csv文件定义结构。 然后,您可以让用户通过file输入字段上传文件,然后使用fgetcsv()解析它们,并使用此信息更新您的数据库。一个小例子:

// handle_upload.php
if (isset($_FILES['propfile']) && $_FILES['propfile']['error'] == 0) {
   // try to open the csv file
   $fp = fopen($_FILES['propfile']['tmp_name'], "r");
   if ($fp) {
      // you must decide if you need the headers in the csv file
      // in this example there are no header so we just loop through
      // the data
      while ($record = fgetcsv($fp)) {
        // $record[0] to $record[5] should
        // contain the data you need to insert into your table
      }
      fclose($fp);
   }
}
// do something similar for the next file containing data
// for the tbl_units table

答案 1 :(得分:1)

对于删除,您可以通过以这种方式使用“IN”关键字来执行批量删除,例如tbl_properties表:

DELETE FROM tbl_properties WHERE id IN (1,2,3...)

in关键字与您将此语句描述为:

相同
DELETE FROM tbl_properties WHERE id = 1 OR id = 2 OR id = 3

并且你想要多少id你想要的好处就是你只抛出一次delete语句来删除所有这些行而不是循环它们并继续调用delete语句,这将是很多工作服务器的进程,不幸的是,对于更新而言,这是不可能的,因为如果你要用他们拥有的每一行的相同信息来更新所有列,你只能在每个语句的条件中抛出一个。

对于解析excel,有一些库可以帮助您管理它,并在解析过程中将每个列转换为数组,以便您轻松管理它。