Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сделать одним инсертом множественную вставку 
V
    Опции темы
dementiev
Дата 20.11.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.2.2008
Где: Минск

Репутация: нет
Всего: 1



Здравствуйте. 

Таблица `human`
+------------------+-----------+
| id_human        | name     |
--------------------+-----------+
|   1                   |   dima     |
|   2                   |  anton    |
|   3                   |  sergei    |
+------------------+------------+

Таблица `mail`
+------------+--------------+-----------------+-------------------+
|    id_mail  |  id_sender |    id_receiver |        topic        |
--------------+---------------+----------------+------------------+  
|        1       |          1       |            2        |        'lalala`    |
|        2       |          3       |            1        |        'ararat'    |
+------------+--------------+-----------------+-------------------+

id_sender и id_receiver - это фк на id_human (т.е. человек может быть как сендэром, так и ресивером).
Задача : отправить письмо с определённым топиком ВСЕМ пользователям.

Это работает, но вставляет одну запись, что и понятно:
Код

insert into mail (id_sender, id_receiver, topic, text, date_of_sending) 
                    SELECT id_sender, id_receiver, topic, text, date_of_sending FROM mail 
                    where topic = `ararat`
                                                                                                 

Каким образом в одном запросе мне перебрать все id_receiver ? 



PM MAIL   Вверх
destrd
Дата 20.11.2008, 15:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 1.10.2008

Репутация: нет
Всего: 4



Если не ошибаюсь, то только если формировать INSERT такого вида
insert into table values(), values(..), values(..)
--------------------
Some people, when confronted with a problem, think, "I known, I'll use regular expressions." Now they have two problems.        -- Jamie Zawinski in comp.lang.emacs
PM MAIL ICQ   Вверх
Zloxa
Дата 20.11.2008, 15:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(dementiev @  20.11.2008,  15:10 Найти цитируемый пост)
отправить письмо с определённым топиком ВСЕМ пользователям.

Код

insert into mail (id_sender, id_receiver, topic, text, date_of_sending) 
  select :sender id_sender
            , id_human id_receiver
            ,:topic topic
            ,:text text
            ,sysdate date_of_sending
   from human



Добавлено @ 16:06
Или так, если мы хотим переслать ранее сформированное письмо
Код

insert into mail (id_sender, id_receiver, topic, text, date_of_sending) 
  select mail.id_sender
            , id_human id_receiver
            ,mail.topic
            ,mail.text
            ,sysdate date_of_sending
   from human,mail
   where mail.topic = `ararat`
        -- and mail.id_receiver <> human.id_human -- если нам не надо пересылать это писмо повторно тому, кому оно уже доставлнео
       


Это сообщение отредактировал(а) Zloxa - 20.11.2008, 16:07


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
dementiev
Дата 20.11.2008, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.2.2008
Где: Минск

Репутация: нет
Всего: 1



Zloxa, спасибо. 
То, что надо. Не мог бы мне ещё объяснить, что значит конструкция   "id_human id_receiver"      - это и есть "перебрать" все id_receiver  ? 
Ещё раз, спасибо.
PM MAIL   Вверх
Zloxa
Дата 21.11.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(dementiev @  20.11.2008,  19:22 Найти цитируемый пост)
что значит конструкция   "id_human id_receiver"

В данном случае ничего не значит.

Вообще в селект листе это обозначает что в стобец, которому мы присваиваем имя id_receiver, мы наполняем значениями id_human мы назначаем имя стобца id_receiver. (В некоторых диалкетах требуется писать id_human as id_receiver). Но в конструкции insert into ... select это не имеет никакого значения.. я так пишу просто для повышения читаемости.



Это сообщение отредактировал(а) Zloxa - 21.11.2008, 14:22


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1036 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.