как вставить много строк без использования цикла со стороны сервера - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть таблица пользователей и таблица уведомлений

Я хочу вставить уведомление для каждого пользователя с ролью (admin)

как это сделать с помощью SQLкоманды?без зацикливания и (вставка) команды со стороны сервера

 SELECT id.users FROM users
 , (
INSERT INTO `notifications` (`id`, `note`, `link`, `type`, `object_id`, `user_id`, `status`, `status_2`, `user`, `date`) VALUES (NULL, '', '', '', '', id.user , '', '', '', '');

)

WHERE user_role.users = "admin"

пс: я использую CodeIgniter

Я пробовал это, но синтаксис неправильный

Ответы [ 2 ]

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

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

$this->db->query("
    INSERT INTO `notifications` (`note`, `link`, `type`, `object_id`, `user_id`, `status`, `status_2`, `user`, `date`)
    SELECT '' AS note, '' AS link, '' AS type, '' AS object_id, id, '' AS status, '' AS status_2, '' AS user, '' AS date  FROM users WHERE user_role.users = 'admin'
");

Я предположил, что idполе в таблице уведомлений - автоинкремент, поэтому я пропустил это.

0 голосов
/ 27 декабря 2018
$this->db->insert_batch()

Создает строку вставки на основе предоставленных вами данных и запускает запрос.Вы можете передать массив или объект в функцию.Вот пример использования массива:

$data = array(
        array(
                'title' => 'My title',
                'name' => 'My Name',
                'date' => 'My date'
        ),
        array(
                'title' => 'Another title',
                'name' => 'Another Name',
                'date' => 'Another date'
        )
);

$this->db->insert_batch('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'),  ('Another title', 'Another name', 'Another date')

А для большого массива или пакета вы можете разбить данные на куски, как показано ниже:

$chunks = array_chunk($data, 500);

foreach ($chunks as $key => $chunk) {
    $this->db->insert_batch('table', $chunk);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...