Php mysql вставляет значения ключа массива для того же идентификатора таблицы - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть массив, как показано ниже.

enter image description here

Где мне нужно вставить все значения ActionKey и ActionValue, соответствующие каждомуИндекс для того же AdId

т.е.)
0-й индекс - смс - 213123 и

1-й индексный вызов - 12313

Я пытаюсь что-то вроде, но не

$sDate = date("Y-m-d H:i:s");
$values = array();
$d_actionKey = $this->params()->fromPost('d_ActionKey');
$d_actionValue = $this->params()->fromPost('d_ActionValue');

$sql = "INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES";

foreach($values as $value) {
    $values[] = "($sDate, $d_actionKey, $d_actionValue)";
}

Данные моей таблицы должны выглядеть следующим образом.

ОБНОВЛЕННЫЙ КОД :

Мне нужно получить AdId из последней таблицывставленное значение.Затем возьмите этот последний вставленный AdId и вставьте в AdActions

$adActionsInsert = $this->getAdLibraryTable()->saveAdd($dataArray);

$query='INSERT INTO `AdActions` (`AdId`,`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ';
        for($i=0; $i < count($adActionsArray['ActionKey']); $i++)
        {
            if($i!=0)
                $query .= ', ';

            $query .= sprintf("(%d,'%s', '%s', '%d')",
            $adActionsInsert,
            $adActionsArray['CreatedDate'],
            $adActionsArray['ActionKey'][$i],
            $adActionsArray['ActionValue'][$i]);
        }

Я могу получить последнее значение вставки, как показано ниже (из файла модели)

$this->tableGateway->lastInsertValue;

enter image description here

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Если вы хотите вставить массив $ data в таблицу AdActions.Вы можете построить свой запрос следующим образом.

$data = [
    'CreatedDate' => '2018-12-12 08:04:32',
    'ActionKey' => [
        0=>'sms',
        1=>'call'
    ],
    'ActionValue' => [
        0 => 213123,
        1 => 12313
    ]
];
$query='INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ';
for($i=0; $i < count($data['ActionKey']); $i++)
{
    if($i!=0)
        $query .= ', ';
    $query .= sprintf("('%s', '%s', '%d')",
        $data['CreatedDate'],
        $data['ActionKey'][$i],
        $data['ActionValue'][$i]);
}
echo $query;

Это должно дать вам запрос, подобный этому

INSERT INTO `AdActions` (`CreatedDate`,`ActionKey`,`ActionValue`) VALUES ('2018-12-12 08:04:32', 'sms', '213123'), ('2018-12-12 08:04:32', 'call', '12313')
0 голосов
/ 12 декабря 2018

Я не понимаю, почему вы используете

foreach($values as $value)
        {

            $values[] = "($sDate, $d_actionKey, $d_actionValue)";
        }

раздел, поскольку вы объявили $values = array();

Если ваш массив похож на

$arr = array(
 'date' => '',
 'ActionKeys' = > array(
                    [0] => 'sdsdsd',
                    [1] => 'fghfgh',
                  ),
'ActionValues' = > array(
                    [0] => '345345',
                    [1] => '455496',
                  )
)
you can create values as 
$ActionKeys   = $arr[0]['ActionKeys'];
$ActionValues = $arr[0]['ActionValues'];
$date = $arr[0]['date']
$values = '';
for($i=0;$i<count();$i++){
   if($i!=0)
    $values.=','
    else
    $values.=' ($date, $ActionKeys[i], $ActionValues[i])';
}

then insert inside command add values as $values;

loop $ arr ifэто массив;

0 голосов
/ 12 декабря 2018

Согласно Вставка нескольких строк в mysql , наборы данных при одновременной вставке нескольких строк должны быть разделены запятыми, как

INSERT INTO table
    (col1, col2)
VALUES
    (data11, data12), -- first set of data, ended by comma
    (data21, data22); -- second set of data

Это означает, что добавьте запятую вконец $values[] = "($sDate, $d_actionKey, $d_actionValue), и вы можете использовать substr, чтобы удалить запятую последнего оператора, так как он не нужен.(и помните о внедрении SQL)

Edit

dataxy будет $ d_actionKey и $ d_actionValue

...