За последние 24 часа нас посетили 35052 программиста и 1756 роботов. Сейчас ищут 746 программистов ...

Update только первого значения из нескольких

Тема в разделе "PHP и базы данных", создана пользователем dolben, 5 фев 2014.

  1. dolben

    dolben Активный пользователь

    С нами с:
    30 июл 2010
    Сообщения:
    25
    Симпатии:
    1
    Есть ячейки в таблице с названием
    is_main
    При выборке возвращает три строки со значениями
    id1 is_main=1
    id2 is_main=0
    id1 is_main=1

    Как одним запросом обновить значения у id 1 поставить один.. а остальные поставить 0..?
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    наверное можно сделать логическое выражение типа SET is_main=(id=1), не? я не пробовал, мне задача кажется нелепой :)

    если что, в реляционныъ базах нет понятия "первая строка". а если вам надо привязаться к определенному значению поля, то какбы нелепо это выражать целой колонкой нулей в другой колонке.
     
  3. dolben

    dolben Активный пользователь

    С нами с:
    30 июл 2010
    Сообщения:
    25
    Симпатии:
    1
    задача в том чтобы обновить из всех значений только первому 1 остальным 0.
    легко решается двумя запросами:
    update products set is_main='0' where pid=$x;
    update products set is_main='1' where pid=$x limit 1;
    хотелось бы одним.
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    UNION? =) А чем два запроса плохи?
     
  5. dolben

    dolben Активный пользователь

    С нами с:
    30 июл 2010
    Сообщения:
    25
    Симпатии:
    1
    думал есть короче
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хотелось бы, но нет
     
  7. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Как это нет, а так?
    Код (Text):
    1.  
    2. UPDATE table SET is_main = CASE id WHEN 1 THEN 0 ELSE 1 END
     
  8. dolben

    dolben Активный пользователь

    С нами с:
    30 июл 2010
    Сообщения:
    25
    Симпатии:
    1
    этот запрос проверяет айди и если там стоит 1 ставит 0.. в ином случае 1. тоесть просто меняет наоборот.
    я правильно понял?
    а мне нужно чтобы не зависимо от того что стояло до этого.. в первом ставило 1 а дальше все нули.
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    так можно и до функций самописных дойти. это изврат =)

    замени на IF
     
  10. dolben

    dolben Активный пользователь

    С нами с:
    30 июл 2010
    Сообщения:
    25
    Симпатии:
    1
    UPDATE `icms_products_specifications` SET `is_main` = CASE `specification_id` WHEN 1 THEN 0 ELSE 1 END WHERE `products_id` = 2813
    конкретный запрос..
    с этим products_id в базе сейчас два specification_id у которых is_main = 1
    после выполнения затронуто 0 строк

    Добавлено спустя 43 секунды:
    Можешь нарисовать?

    Добавлено спустя 9 минут 12 секунд:
    Исправил запрос
    UPDATE `icms_products_specifications` SET `is_main` = CASE WHEN 1 THEN 0 ELSE 1 END WHERE `products_id` = 2813
    стояло в обоих 1.. поставило везде 0
     
  11. dolben

    dolben Активный пользователь

    С нами с:
    30 июл 2010
    Сообщения:
    25
    Симпатии:
    1
    $sql = "SET @i:=0; UPDATE icms_products_specifications SET is_main = CASE WHEN ( @i := @i +1 ) = 1 THEN 1 ELSE 0 END WHERE `products_id` = '2813'";
    задачу победил самостоятельно...level up!
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нафиг такую победу =)
     
  13. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Отчего же? Ораклоидов голой жопой ненапугаешь :)
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если не стоит задача мегаоптимайза, то два запроса это ок.
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    "самостоятельно".