За последние 24 часа нас посетили 16624 программиста и 1677 роботов. Сейчас ищут 819 программистов ...

За один запрос, разные по типу запросы по условию

Тема в разделе "MySQL", создана пользователем VLK, 26 ноя 2014.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Смотрите, есть таблица с метатегами:
    вопрос стало быть такой, можно ли как нибудь в одном запросе организовать следующее:
    если метки (с таким названием) нет, добавить метку (ну id автоматически, название и счетчик на 1), а если есть, то инкрементировать счетчик у существующей записи.

    Вопрос можно ли это организовать одним запросом?
    Суть вопроса, ну может такое возможно (хотя я сомневаюсь), и все это делают, а я не знаю как такое сделать, непорядок.
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    ~
    Код (Text):
    1. INSERT INTO table (meta_id,meta_name,meta_count) VALUES (1,2,3) ON DUPLICATE KEY UPDATE meta_count=meta_count+1;
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Спасибо за ответ, почитал в интернете, там написано что подобная конструкция работает только для уникальных полей (свойств).
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Что вас в этом смутило? Хотябы одно поле должно быть уникальным ключём, он в вашей таблице наврняка есть.
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    А вот сейчас не понял :)

    Вообще меня в большей мере интересовал такой запрос (один запрос) который делал бы что то типа:
    т.е. что то типа if else в запросе. Но как я понимаю я как обычно не правильно поставил задачу.

    а насчет не понял, допустим meta_name у меня НЕ уникальный, что тогда делать?

    А насчет смущения, ни чего не смутило, я просто когда возникает какой то вопрос задаю его в первую очередь поисковику и очень часто находятся темы на разных форумах, где как раз такой же как у меня вопрос, там обсуждений много, а когда дело доходит до решения, то мы видим ответ типа "Всем спасибо! проблема решена!", а вот как он ее решил конечно же он не пишет, вот я и решил по максимуму оставить информацию, что бы если кто то будет искать..
     
  6. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Запрос из примера смотрит на уникальные ключи таблицы. Обычно это поле primary key, какой-нибудь id. Если же в таблице есть ещё одно поле с типом unic то у вас 2 ключа то при этом запросом с ON DUPLICATE KEY UPDATE будет изменена всёравно только одна строка. Тоесть применения запросов с N DUPLICATE KEY UPDATE с "multiple unique indexes" нужно избегать.

    Отвечая на ваш запрос:
    Если строка существует, выполнить INSERT или UPDATE или SELECT, если не существует то выполнить INSERT, UPDATE, SELECT одним запросом - нет нельзя. Эта концструкция позволяет вам создать запись или изменить существуюшую при совпадении ключа и только.
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Zuldek, совсем забыл сказать - спасибо за разъяснения.