За последние 24 часа нас посетили 19526 программистов и 1633 робота. Сейчас ищут 1803 программиста ...

Использование операторов SELECT, DELETE и UPDATE в одном зап

Тема в разделе "Сделайте за меня", создана пользователем Dante5, 18 сен 2015.

  1. Dante5

    Dante5 Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    26
    Симпатии:
    0
    возможно ли в одном запросе к базе использовать операторы SELECT, DELETE и UPDATE если можно то как (в примере)
    к примеру из одной таблици надо SELECT из второй DELETE из третей UPDATE и все это в одном запросе
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    Транзакции для этого придумали.
     
  3. Dante5

    Dante5 Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    26
    Симпатии:
    0
    вот это одним запросом зделать
    Код (PHP):
    1. $stmt = $PDO->prepare("select * FROM `table` where `status`=? and `date_of`<?");
    2. $stmt->execute(array(0,time()));
    3. $stmt->setFetchMode(PDO::FETCH_LAZY);
    4. while($ROW_K = $stmt->fetch())
    5. {
    6.  
    7.     $stmt = $PDO->prepare("DELETE FROM `table` WHERE `id`=? and `date_off`<? and `status_works`='0'");
    8.     $stmt->execute(array($ROW_K->id,time()));
    9.  
    10.     
    11.     $stmt  = $PDO->prepare("UPDATE `table2` SET `start_ta`=`start_ta`-? WHERE `id`=?");
    12.     $stmt->execute(array(1,$ROW_K->id));
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    Dante5 почитай как через PDO сделать транзакцию, логика такая:

    начало транзакции
    запросы, сколько угодно
    конец транзакции
    как опция можно решить: применить все запросы или откатить все изменения что были сделаны в транзакции
    Как обычно пример в документации с несколькими запросами: https://secure.php.net/manual/ru/pdo.transactions.php

    и зачем внутри while делать столько execute, проще сформировать один запрос на удаление и второй на обновление
    вместо этого `id`=? почитай про IN в MySQL
     
  5. Dante5

    Dante5 Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    26
    Симпатии:
    0
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    а можете пример написать за основу код выше а то пока что еще больше запутался прочитав что вы предлагаете
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    просто дополнительно выполнить запросы стартующие и применяющие транзакцию
     
  7. Dante5

    Dante5 Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    26
    Симпатии:
    0
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    в примере можно показать если не трудно

    Добавлено спустя 14 минут 9 секунд:
    Re: Использование операторов SELECT, DELETE и UPDATE в одном зап
    или не так необходимо удалить запись из table1, а после удаления обновить table2 по WHERE `id`=? гдe id будет ид удаленной записи из table1 как-то так

    DELETE -> UPDATE или UBDATE->DELETE без SELECT
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    Dante5 пример из документации запускал?
     
  9. Dante5

    Dante5 Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    26
    Симпатии:
    0
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    а чем тот пример подходит? как запрос UBDATE сделает изминения в записии по WHERE `id`=? если delete не даст ответ ID записи которую он удалил

    Добавлено спустя 3 минуты:
    Re: Использование операторов SELECT, DELETE и UPDATE в одном зап
    Необходимо внести изменение в определенную запись таблицы 2 и изменить именно ту запись ID которой удален из таблицы 1
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    если не даст - делаешь ролбек и в базе никакие изменения не сохраняются.

    если всё прошло хорошо то делаешь коммит.
     
  11. Dante5

    Dante5 Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    26
    Симпатии:
    0
    ну просил же если не трудно на основе кода ниже написать пример в написанных сообщениях ничего не понимаю еще больше тупить начинаю
    Код (PHP):
    1. $stmt = $PDO->prepare("select * FROM `table` where `status`=? and `date_of`<?");
    2. $stmt->execute(array(0,time()));
    3. $stmt->setFetchMode(PDO::FETCH_LAZY);
    4. while($ROW_K = $stmt->fetch())
    5. {
    6.  
    7.     $stmt = $PDO->prepare("DELETE FROM `table` WHERE `id`=? and `date_off`<? and `status_works`='0'");
    8.     $stmt->execute(array($ROW_K->id,time()));
    9.  
    10.     
    11.     $stmt  = $PDO->prepare("UPDATE `table2` SET `start_ta`=`start_ta`-? WHERE `id`=?");
    12.     $stmt->execute(array(1,$ROW_K->id));
    13.  
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    Я тя понял
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    Dante5 перенести тему в раздел "сделайте за меня"?

    в этом разделе пытаються помочь начать думать и понимать
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    в новички, блондинки, за меня или фриланс - куда тему перенести?

    Добавлено спустя 36 секунд:
    Re: Использование операторов SELECT, DELETE и UPDATE в одном зап
    а уже
     
  15. Dante5

    Dante5 Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    26
    Симпатии:
    0
    легче человеку объяснить примером с использованием предоставленого кода чем тыкать в книги , документации и так дале которые разбирают в институтаха по одной теме пару дней притом что препод там все розжовует напримемерах

    Добавлено спустя 1 минуту 31 секунду:
    Re: Использование операторов SELECT, DELETE и UPDATE в одном зап
    вот не пойму что общего данный пример в документации имеет с моим условием чем он мне может помочь

    Код (PHP):
    1. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    2.  
    3.   $dbh->beginTransaction();
    4.   $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')");
    5.   $dbh->exec("insert into salarychange (id, amount, changedate) 
    6.       values (23, 50000, NOW())");
    7.   $dbh->commit();
    Добавлено спустя 36 минут 53 секунды:
    Re: Использование операторов SELECT, DELETE и UPDATE в одном зап
    Все всем спасибо действительно помогло
    Код (PHP):
    1. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    2.  
    3.   $dbh->beginTransaction();
    4.   $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')");
    5.   $dbh->exec("insert into salarychange (id, amount, changedate) 
    6.       values (23, 50000, NOW())");
    7.   $dbh->commit();  
    поучилось у меня так
    Код (PHP):
    1. $stmt = $PDO->prepare("select * FROM `table` where `status`=? and `date_of`<?");
    2.     $stmt->execute(array(0,time()));
    3.     $stmt->setFetchMode(PDO::FETCH_LAZY);
    4.     while($ROW_K = $stmt->fetch())
    5.     {
    6.         $ID = $ROW_K->id;
    7.         $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    8.           $PDO->beginTransaction();
    9.           $PDO->exec("DELETE FROM `table` WHERE `id`='".$ID."' and `date_off`<'".time()."' and `status_works`='0'");
    10.           $PDO->exec("UPDATE `table2` SET `start_ta`=`start_ta`-'1' WHERE `id`='".$ID."'");
    11.           $PDO->commit(); 
    12.     } 
    13.  
    вроде работает как надо удаляет и обновляет все записи согласно условию просто если бы сразу сказали заменить в
    Код (PHP):
    1. while($ROW_K = $stmt->fetch())
    2.     {} 
    Код (PHP):
    1. $stmt = $PDO->prepare("DELETE FROM `table` WHERE `id`=? and `date_off`<? and `status_works`='0'");
    2.     $stmt->execute(array($ROW_K->id,time()));
    3.  
    4.     
    5.     $stmt  = $PDO->prepare("UPDATE `table2` SET `start_ta`=`start_ta`-? WHERE `id`=?");
    6.     $stmt->execute(array(1,$ROW_K->id)); 
    понятнее бы всем было у кого возникнет подобный вопрос. но все равно спасибо . скажите такой вариант можно использовать )))) или есть че полутше
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Использование операторов SELECT, DELETE и UPDATE в одном

    Пиши конкретнее, что тебе не понятно в документации, когда пишут абстрактно, значит не хотят делать сами

    смотри пример №5 чтобы избавиться от while
    https://secure.php.net/manual/ru/pdostatement.execute.php