Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: За раз добавить несколько разных записей в БД!
 
 автор: frv   (09.07.2007 в 12:54)   письмо автору
 
 

Вот такая задача:
Есть база данных, которая содержит список пользователей и список задача которые им нужно выполнить. Бывает так что нужно добавить в базу задачу, которая адресованна всем пользователям. Как сделать так чтобы при выборе из списка поля "Добавить всем" задача (которая была описанна выше) добавлялась бы всем пользователям? Например: "Подмести до 15.05.07" Иванову. Тут проблем нет. А вот "Выкинуть мусор до 15.07.07 " всем" Как тут поступить? Пробывал циклом, но чего то не получилось.

   
 
 автор: Gust   (09.07.2007 в 14:04)   письмо автору
 
   для: frv   (09.07.2007 в 12:54)
 

>Вот такая задача:
не совсем понятна задача, но все решусь предположить и предложить.
Заведите в списке пользователей еще пользователя, скажем с именем ALL, для которого вы и будете назначать общие задачи в списке задач. А при выводе задач скажем для Иванова, в запросе проверять список задач не только на его имя, но и на имя ALL.

   
 
 автор: frv   (09.07.2007 в 15:30)   письмо автору
 
   для: Gust   (09.07.2007 в 14:04)
 

так пробывал, не совесем то. Получается если один из пользователей ознакомиться с задачей и поставить статус ознакомления, то следующие участники уже не увидять это сообщение, т.к. из базы выбираются значения со статусом 0, т.е. не просмотренные.
Тбалица Пользователи
ИД_п, ФИО, Маил.

Таблица Отделы
ИД_о, Наименование_Отдела

Таблица Задания
ИД_з, Наименование_задания, дата_выполнения, статус.

Вот примерно. Т.е. отдел "Все отделы" заведен. Но нужно при добавлении задания сразу появилось, скажем если 5 пользователей, то у всех 5-ти пользователей одно и тоже задание.
Да люди, еще сразу вопрос, нужно еще malito отправить так же всем. Пока сделал только по отдельности каждому отдельно, в базе есть еще поле типа статус_почтовый, создаю список всех кому не отправлялось задание, напротив каждого кнопка "отправить", после нажатия статус меняется и отправляется письмо. Как-бы как всем отправить я понимаю, тупо селектить все майлы и через ";" на отправку. Вопрос: как отправить сразу всем почтовые сообщения одной кнопкой? :)

   
 
 автор: Trianon   (09.07.2007 в 17:34)   письмо автору
 
   для: frv   (09.07.2007 в 15:30)
 

Мой вариант именно это и делает.

Добавляет записи по числу респондентов.

GROUP_CONCAT() пригодится для отправления нескольким адресатам.
Но осторожнее с ней. Не переусердствуйте.

   
 
 автор: Trianon   (09.07.2007 в 14:15)   письмо автору
 
   для: frv   (09.07.2007 в 12:54)
 


INSERT INTO tasks (jobname, performed, user_id) 
  SELECT 
        'Подмести пол' AS jobname
       , 0 AS performed
       , id AS user_id 
    FROM users 

   
 
 автор: frv   (10.07.2007 в 06:57)   письмо автору
 
   для: Trianon   (09.07.2007 в 14:15)
 

Не могли бы вы прокомментировать запрос, немного он не ясен. Сразу скажу что умею составлять пока только простые запросы. Тот что написали вы мне немного не ясен. Запрос на добавление в таблицу сопровождается селектом значений введенным пользователем?
Допустим есть форма:
Вид_задания: _Бла-бла__________
Дата_выполнения:_01.01.07 ______
исполнитель: ВСЕ

структура таблицы приведена више. В пхп пишу

<?
if ("$id_user<> 15") {
$query "INSERT INTO `zadanie`
( `id_zadania` ,`data_zadania`, `vid_zadania` ,  `id_user` , `status` ) 
VALUES ('' ,'
$data_zadania', '$vid_zadania, '$id_user', '');";
$reg mysql_query ($query);
}
esle {
// вот тут я уже затрудняюсь.......
// сначало подсчитать кол-во пользователей кроме того что "ВСЕ" - 15 id
$query "SELECT id_user FROM `user` where id_user not like '15';";
$reg mysql_query ($query);
// затем счетчик на кол-во полученных значений выполнить запрос! но немного не понятно... как его реализовать
for ($i=0$i<mysql_num_rows($reg); $i++) {
?>

   
 
 автор: Trianon   (10.07.2007 в 11:07)   письмо автору
 
   для: frv   (10.07.2007 в 06:57)
 

>Не могли бы вы прокомментировать запрос, немного он не ясен. Сразу скажу что умею составлять пока только простые запросы. Тот что написали вы мне немного не ясен. Запрос на добавление в таблицу сопровождается селектом значений введенным пользователем?
>Допустим есть форма:
>Вид_задания: _Бла-бла__________
>Дата_выполнения:_01.01.07 ______
>исполнитель: ВСЕ
>
>структура таблицы приведена више. В пхп пишу

добавьте поле номер_приказа.
тогда код будет выглядеть так.


<?
$query 
"
INSERT INTO `zadanie` ( `data_zadania`,`nomer_prikaza`,  `vid_zadania` ,  `id_user`  ) 
   SELECT '
$data_zadania' AS data_zadania, 
         '
$nomer_prikaza' AS nomer_prikaza, 
         '
$vid_zadania' AS vid_zadania, 
         id_user, 
    FROM `user`"
;
$reg mysql_query ($query);
$query "SELECT * FROM zadanie WHERE `nomer_prikaza` = '$nomer_prikaza' ";
$reg mysql_query ($query);
while(
$row mysql_fetch_assoc($row))
{
    
print_r($row);


?>
>


Это простой Insert-select запрос. Не сложный.

   
 
 автор: frv   (13.07.2007 в 08:18)   письмо автору
 
   для: Trianon   (10.07.2007 в 11:07)
 

Огромнейшее СПАСИБО. Все прекрасно работает. И все прекрасно объяснено! :)
Только вот тут

$reg = mysql_query ($reg);
while($row = mysql_fetch_assoc($row))


скоре всего так:

$reg = mysql_query ($reg);
while($row = mysql_fetch_assoc($reg))

   
 
 автор: oradev   (09.07.2007 в 16:25)   письмо автору
 
   для: frv   (09.07.2007 в 12:54)
 

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



DECLARE
   CURSOR us_cur
   IS
      SELECT *
        FROM us_tab;

   us_rec   us_cur%ROWTYPE;
BEGIN
   OPEN us_cur;
   LOOP
      FETCH us_cur
       INTO us_rec;
      EXIT WHEN us_cur%NOTFOUND;
      UPDATE us_tab
         SET id_job = 4
       WHERE id_us = us_rec.id_us;
   END LOOP;
   CLOSE us_cur;
END;

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования