我有两个具有关系的表
+----------------------+ +-----------------+
| Shape | | Point_Values |
+----------------------+ +-----------------+
| shape_id (KEY) | | id (KEY) |
| shape_name (VARCHAR) | | point_x (INT) |
+----------------------+ | point_y (INT) |
| shape_id (INT) |
+-----------------+
如何在同一请求中同时获取形状和点,这意味着当形状完成时,会出现一个点数组和形状名称/id 。我必须在表中插入,但 shape_id 都匹配。
<小时/>根据要求
Array ( [name] => "circle" [points] => Array ( [x] => Array ( [0] => 182 [1] => 190 [2] => 215 [3] => 240 [4] => 291 [5] => 328 [6] => 364 [7] => 391 [8] => 425 [9] => 459 [10] => 487 [11] => 512 [12] => 529 [13] => 540 [14] => 551 [15] => 560 [16] => 570 [17] => 581 [18] => 592 [19] => 604 [20] => 617 [21] => 628 [22] => 635 [23] => 639 [24] => 642 [25] => 642 [26] => 640 [27] => 630 [28] => 619 [29] => 606 [30] => 591 ) [y] => Array ( [0] => 165 [1] => 159 [2] => 150 [3] => 147 [4] => 144 [5] => 144 [6] => 147 [7] => 152 [8] => 162 [9] => 172 [10] => 184 [11] => 199 [12] => 211 [13] => 219 [14] => 225 [15] => 228 [16] => 231 [17] => 232 [18] => 233 [19] => 233 [20] => 231 [21] => 222 [22] => 204 [23] => 189 [24] => 156 [25] => 133 [26] => 120 [27] => 100 [28] => 85 [29] => 69 [30] => 54 ) ) )
最佳答案
考虑到该数组,这段代码应该可以很好地工作。它执行一次初始插入以从表格形状中获取 id,并且所有点都会批量插入。
function insertShape($s){
mysql_query('INSERT INTO shape (name) VALUES ("'.$s['name'].'");');
$id=mysql_insert_id();
$i=0;
for(;;){
if(!isset($s['points']['x'][$i], $s['points']['y'][$i]))break;
$inserts[]='('.$id.','.$s['points']['x'][$i].','.$s['points']['y'][$i].')';
$i++;
}
mysql_query('INSERT INTO point_values (shape_id,x,y) VALUES '.implode(',',$inserts));
}
如果您的情况不需要对按键进行严格的测试,我可能会将其设为 foreach。
关于mysql - 插入到由主键链接的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5630533/