#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. Ах, это блестяще. Спасибо! 🙂