php - 如何将具有一些相同值的php数组拆分并插入到两个具有唯一值的mysql关系表中

标签 php mysql unique distinct relational

我有这个 php $array :

usr_id | value 1 | value 2 | value 3

1      |    a    |    b    |   c
2      |    a    |    b    |   c
7      |    d    |    e    |   f
8      |    a    |    e    |   f

我想将其拆分为两个具有唯一组合值的关系表:

表 1 > 值

id | value1 | value2 | value3

1  | a      | b      | c
2  | d      | e      | f
3  | a      | e      | f

表 2 > 关系

id | usr_id | values_id 

1  |    1    | 1
2  |    2    | 1
3  |    7    | 2
4  |    8    | 3

最简单的方法是什么?

提前非常感谢!

最佳答案

我的第一个想法是对 php 数组进行两次传递。一次创建值表,然后再次创建关系表。可能有一种方法只需一次即可完成此操作,但既然您说您只会执行此操作 1x,那么也许不需要进一步优化它。

(pcode)
create table values ( id int auto_increment, value1 int, value2 int value3 int, 
    primary key(id), unique key( value1, value2, value3 ));    

foreach( $array as $val )
{
   $q = $pdo->prepare( "insert ignore into values ( value1, value2, value3 ) values (?,?,?) " )
   $q->bindParam( $val->value1 );
   ...
}

然后进行第二遍,从 values 中选择适当的值并将其插入到关系表中。

(pcode)
foreach( $array as $val )
{
   $ret = $pdo->do( "select id from values where value1 = ?, value2 = ?, value3 = ?" );
   ( build the query )
   $row = $ret->fetch();
   $id = $row->id;

   (now insert into relations )
   $pdo->prepare( "insert into relations (usr_id, values_id ) values ( ?, ? )" );
   $pdo->bindParam( 1, $id );
   $pdo->bindParam( 2, $val->usr_id );
   $pdo->execute();
}

关于php - 如何将具有一些相同值的php数组拆分并插入到两个具有唯一值的mysql关系表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324882/

相关文章:

php - 如何从 codeigniter 模型中获取结果作为对象

mysql - 我的平面文件应该是 UCS-2,但我无法导入到 MySQL 数据库中

sql - SELECT 查询很慢(不需要索引),为什么这么慢?

MySQL每个用户的第二个最大值

php - 使用名字和姓氏创建唯一的 8 字符用户 ID,比较 MySQL 表中的现有用户 ID,在唯一时插入

python - 随机选择一个列表中不在第二个列表中的元素

javascript - Laravel 请求 $request->file() 始终为空

php - 错误 400 : PHP 5. 4 个应用程序被阻止部署到 Google App Engine

php - 更新 mySQL 列

vba - 在excel vba数组中查找唯一日期