Обновите MySQL Columns с несколькими значениями и вставьте, если значение еще не существует в базе данных - PullRequest
0 голосов
/ 08 января 2019

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

Запрос:

UPDATE IGNORE CONFIGVALUE 
JOIN CONFIGOBJECT on CONFIGOBJECT.COID=CONFIGVALUE.COID 
JOIN CLIENTSTATE on CONFIGOBJECT.COID=CLIENTSTATE.COID 
JOIN STATUSVALUE on CLIENTSTATE.EID=STATUSVALUE.EID 
SET CONFIGVALUE.VAL = CASE CONFIGVALUE.CODE


WHEN 'IMAGE' THEN
        "2.40.4139d-EEc-k418-x64-181112"
WHEN 'IMAGE_UPDATE_MODE' THEN
        '2'
ELSE
        CONFIGVALUE.VAL
END    

WHERE CONFIGVALUE.CODE IN ('IMAGE','IMAGE_UPDATE_MODE') AND CONFIGOBJECT.PARENT=3367 AND STATUSVALUE.VAL IN ('HP t520 Flexible Series TC');

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

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

Я читал о INSERT .... ON DUPLICATE KEY UPDATE и я думаю, что мне нужно это, чтобы получить желаемый результат. Проблема в том, что я не уверен, как подготовить запрос.

База данных для StratoDesk хранит значения конфигурации в одной таблице, в столбце с именем «CODE» и столбце с именем «VAL»

CODE содержит все возможные параметры конфигурации, VAL - соответствующие значения (конечно). Я думал о попытке

Мне нужно вставить «IMAGE» и «IMAGE_UPDATE_MODE» в столбец «CODE» для каждой записи, где она отсутствует, но мне нужно вставить значения «2.40.4139d-EEc-k418-x64-181112» и « 2 "в столбце VAL.

Как лучше всего преобразовать оператор обновления, который у меня есть выше, чтобы он обновлял поля, если они существуют для этого тонкого клиента, но вставлял новые поля / значения для тех, которые не имеют? Я не уверен в синтаксисе.

Я немного не в этом разбираюсь, любая помощь с синтаксисом или если кто-то знает другой / лучший метод, был бы очень признателен.

И прежде чем спросить «Почему бы вам просто не сделать это с помощью StratoDesk?» - Это не функция. Нет способа сделать то, что мне нужно, используя их графический интерфейс, поэтому мне нужно взаимодействовать с базой данных SQL.

Привет

Phil

РЕДАКТИРОВАТЬ: Я ценю, что это похоже на вопрос, с которым я связан. Этот вопрос ответил на мою начальную проблему. Это мой следующий камень преткновения, я не хотел вновь открывать исходный вопрос.

...