Вставить в таблицы, связанные первичным ключом - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть две таблицы с отношением

+----------------------+      +-----------------+
|        Shape         |      |  Point_Values   |
+----------------------+      +-----------------+
| shape_id (KEY)       |      | id (KEY)        |
| shape_name (VARCHAR) |      | point_x (INT)   |
+----------------------+      | point_y (INT)   |
                              | shape_id (INT)  |
                              +-----------------+

Как вы собираетесь структурировать вставку в целом или для CodeIgniter в то же время, когда вы получаете форму и точки в одном запросе, что означает, что когда форма заканчивается, существует массив точек и имя / идентификатор формы , Я должен сделать вставки в таблицу, но их 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
                )

        )

)

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Хорошо, учитывая этот массив, этот код должен хорошо работать. Он делает одну начальную вставку, чтобы получить идентификатор из формы таблицы, и все точки вставляются в пакетном режиме.

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, если бы ваша ситуация не нуждалась в тщательном тестировании ключей.

0 голосов
/ 12 апреля 2011

Я предлагаю вам базовый алгоритм, сначала сделайте ограничение внешнего ключа между shape_id(point_value) и shape_id(shape)

, сначала вставьте в таблицу форм

mysql_query("INSERT INTO shape SET shape_name='".$array['name']."'");

, а затем получите last_insert_id

$shape_id=mysql_insert_id();

затем перейдите к таблице point_value

foreach( $array['points] as $k)
{

   $qry= "INSERT INTO point_value SET
                               point_x=(int)$array['points']['x'][$i],
                               point_y=(int)$array['points']['y'][$i],
                               shape_id=(int)$shape_id ";
   mysql_query($qry);
} 

я надеюсь, что это поможет вам ... попросить помощи Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...