2014-10-12 60 views
0

我有這個PHP $數組:如何分割並插入一個PHP數組與一些相同的價值與獨特的價值觀兩個MySQL關係表

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

它不清楚其中'2/relation'值從 – ethrbunny 2014-10-12 12:02:44

+0

未來對不起......在表中「關係」的ID是一個新的自動增量ID,usr_id來自PHP數組,values_id是插入的自動遞增ID來自「值」表中插入的唯一「值」!謝謝 – user1719210 2014-10-12 12:07:15

+0

對我來說,這是相同的,我只會在mysql中導入我的php數據時只做一次這個操作! – user1719210 2014-10-12 12:18:09

回答

0

我的第一個想法是在php數組上做兩遍。一次創建值表,然後再創建關係表。可能有一種方法只用一遍就可以完成,但既然你說你只會這樣做1x,可能不是necc就可以進一步優化它。

(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

非常感謝!將「唯一(value1,value2,value3)」創建一個獨特的「組合」值?因爲有些值可能是相同的,但不是整個集合。我只是編輯了一點我的php數組,以便更清楚:對於usr_id 8 value1可以是「a」。謝謝 ! – user1719210 2014-10-12 12:33:45

相關問題