Вставить значения из другой строки, а строка обработки не существует. Вставка Mysql

#mysql #database #insert

#mysql #База данных #вставить

Вопрос:

У меня есть система вопросов / ответов, и я пытаюсь записать время отклика при ответе на вопрос.

Простой фрагмент INSERT кода, который я использую:

  INSERT INTO questions (responsetime, {otherfields})
 (SELECT Now-msgDateTime, {otherfields} FROM questions WHERE headerid='This_Header_id' ORDER    BY id DESC LIMIT 1)
  

Это работает абсолютно нормально для всех вторичных сообщений в потоке, но для первого сообщения в потоке оно будет новым и уникальным HeaderId , поэтому запрос

 (SELECT * FROM questions WHERE headerid='This_Header_id')
  

Не вернет никаких значений. В этом случае мое первое обновление SQL не INSERT будет новой строкой.

Итак, как мне написать резервный вариант для вставки ‘0’ в responsetime поле, в котором находится строка, выбранная headerid NULL ?

Ответ №1:

Вы должны иметь возможность использовать функцию group by, такую как MAX, которая вернет либо null, либо соответствующее значение. Если есть лучший способ сделать это, хотелось бы увидеть другие ответы, но подозреваю, что это сработает для вас.

 INSERT INTO questions (responsetime, {otherfields})
 (SELECT IF(ISNULL(MAX(headerid)), 0, Now-msgDateTime)
   , {otherfields} 
  FROM questions WHERE headerid='This_Header_id' 
  ORDER BY id DESC 
  LIMIT 1
)
  

Комментарии:

1. Ах, это блестяще. Спасибо! 🙂