2014-09-04 3 views
0

У меня есть таблица с именем sched, которую мне нужно обновить по мере необходимости.Операция Multi Update с использованием основанного на следующем массиве

В настоящее время я создал выход HTML, который выводит текущие значения таблицы sched для редактирования пользователем по своему усмотрению. У меня также есть сценарии для сбора этих изменений и отправки их через ajax/PHP для обновления указанных таблиц db.

Я уже отправил два отдельных массива и использовал array_combine(), чтобы присоединиться к ним.

Пример результатов отправленных и объединенные с помощью PHP:

  [locationID_1] => 4~West 
      [instructorID_1] => 12~Kasey 
      [roomID_1] => 7~Studio 1 
      [classtypeID_1] => 9~Yoga 
      [weekdayID_1] => 5~Friday 
      [time_1] => 05:25 
      [start_date_1] => 2014-09-01 
      [end_date_1] => 2014-09-27 
      [locationID_12] => 2~Oaks 
      [roomID_12] => 2~Body Room 
      [instructorID_12] => 3~Susan 
      [classtypeID_12] => 13~Fitness 
      [weekdayID_12] => 2~Tuesday 
      [time_12] => 05:25 
      [start_date_12] => 2014-09-03 
      [end_date_12] => 2014-09-28 

Так что для последней пары ключей значения - имена столбцов можно думать как о первой части каждого ключа (для последней записи):

UPDATE sched SET 
end_date=2014-09-28 
WHERE schedID=12 

Таким образом, чтобы дать немного больше о примере, число в пределах скобок [] обозначает идентификатор строки таблицы, чтобы быть обновлено (12, Sched).

Бит с ним, выделенный под знаком подчеркивания, является именем столбца (end_date).

Значение, присвоенное каждому ключу, имеет свой собственный идентификатор, полученный из его собственной таблицы db до сообщения ajax.

Мой вопрос в том, как лучше ОБНОВИТЬ любое количество строк в целевой таблице db, используя описанный подход.

Я знаю, что есть много проблем с безопасностью, раскрывая эту информацию о дне в вашем javascript и т. Д., Но это скорее проект для развлечения и обучения (особенно, поскольку я преподаю это себе).

Будьте добры, но информативны - я слышу, как учиться и развиваться.

Благодаря D

+0

почему вы сочетаете? должно быть проще, если это многомерный массив – Ghost

ответ

0

В соответствии с того, что я понимаю, что нужно для создания динамических операторов обновления. Тогда почему бы не создать простую сторону сервера страницы и размещать данные на эту страницу, а затем используйте приведенный ниже запрос,

INSERT INTO sched({COLUMN_NAMES}) VALUES({COLUMN_VALUES}) ON DUPLICATE KEY UPDATE; 

Надеется, что это помогает вам.

0

Вместо того, чтобы комбинировать массивы, я бы предложил использовать структуру данных, как показано ниже. Данные являются более чистыми и доступными с точки зрения человека и алгоритма.

$sched = array 
    (
     1 => array 
     (
      'locationID' => '4~West', 
      'roomID' => '7~Studio 1', 
      'instructorID' => '12~Kasey', 
      'classtypeID' => '9~Yoga', 
      'weekdayID' => '5~Friday', 
      'time' => '05:25', 
      'start_date' => '2014-09-01', 
      'end_date' => '2014-09-27' 
     ), 
     12 => array 
     (
      'locationID' => '2~Oaks', 
      'roomID' => '2~Body Room', 
      'instructorID' => '3~Susan', 
      'classtypeID' => '13~Fitness', 
      'weekdayID' => '2~Tuesday', 
      'time' => '05:25', 
      'start_date' => '2014-09-03', 
      'end_date' => '2014-09-28' 
     ) 
    ); 

А потом зацикливание над ним, как это:

foreach ($sched as $id => $data) 
    { 
     $query = "UPDATE sched SET "; 
     $sets = array(); 
     foreach ($data as $k => $v) 
      $sets[] = "$k = '$v'"; 
     $query .= implode(', ', $sets) . " WHERE schedID = $id"; 

     // do something with query 
    } 
Смежные вопросы