Как разделить и вставить массив php с некоторыми идентичными значениями в две реляционные таблицы mysql с уникальными значениями

У меня есть этот массив php $:

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

Какой самый простой способ сделать это?

Заранее большое спасибо!

0

Решение

Моя первая мысль — сделать два прохода над массивом php. Один раз создать таблицу значений, а затем снова создать таблицу отношений. Вероятно, есть способ сделать это всего за один проход, но, поскольку вы говорите, что вы будете делать это только 1 раз, возможно, нет необходимости оптимизировать его дальше.

(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();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]