Мне нужно выполнить запрос mysql для обновления базы данных стратодеска.
Чего я пытаюсь достичь:
Мне нужно обновить целую кучу тонких клиентских ПК через стратодеск, к сожалению, для этого нет массового обновления, поэтому я работаю напрямую с базой данных MySQL. Цель состоит в том, чтобы обновить используемый образ и режим обновления.
Для этого у меня есть два запроса MySQL, один из которых обновит само изображение, другой обновит «режим обновления изображения».
если я выполню первый запрос, он обновит изображение, но если затем выполнить второй запрос, чтобы обновить режим обновления изображения, он отменит первый запрос. Мой план состоял в том, чтобы объединить оба запроса вместе и обновить оба значения одновременно.
Я немного погуглил, и многие примеры выглядят примерно так (я знаю, этот пример не отражает структуру базы данных, с которой я работаю).
UPDATE orders SET
listPrice = 0,
bloggerPrice = 0.00,
customerPrice = 0.00
WHERE
orders.id = 245745
С Тема переполнения стека
Теперь у меня складывается впечатление, что каждое из значений там хранится в виде отдельной колонки в таблице «заказы». Я почти уверен, что это сработало бы, если бы база данных для стратодесков следовала аналогичной схеме, но это не так.
Они хранят все это в таблице с именем "CONFIGVALUE" - в ней есть два столбца. «CODE» и «VAL», где находятся значения, которые я хочу обновить.
Мне нужно обновить
а) изображение
SET CONFIGVALUE.CODE = 'IMAGE',CONFIGVALUE.VAL="2.40.4130d-EEs-k305-181109"
б) режим объявления
SET CONFIGVALUE.CODE = "IMAGE_UPDATE_MODE", CONFIGVALUE.VAL=2
Как я уже сказал, если я запускаю каждый из них, он обновляет базу данных. Но второй запрос, по-видимому, отменяет первый.
Я объединил их вместе, думая, что это решит мою проблему, но это не так. Если я оберну значение для «изображения» в одинарных кавычках, я получу ошибку об усечении неправильных двойных чисел. Если я использую двойные кавычки, запрос обновит «image_update_mode», но ничего не сделает со значением «IMAGE».
Комбинированный запрос:
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.CODE = 'IMAGE', CONFIGVALUE.VAL='2.40.4130d-EEs-k305-181109', CONFIGVALUE.CODE = 'IMAGE_UPDATE_MODE', CONFIGVALUE.VAL=2 WHERE CONFIGOBJECT.PARENT=1221 AND CONFIGOBJECT.COTYPE=3 /*AND STATUSVALUE.VAL="HP t510 Thin Client"*/ AND CONFIGOBJECT.COID=895;
Структура базы данных StratoDesk
Я в значительной степени убедил себя, что большая проблема заключается в том, что оба значения хранятся в одних и тех же столбцах. На мой взгляд, эти значения должны иметь свои собственные столбцы (возможно, свои собственные таблицы).
Вторичный вопрос, основанный на макете базы данных StratoDesk, похоже, что существует какая-либо нормализация? Я все еще пытаюсь обдумать это. Я чувствую, что было бы намного проще, если бы они были, или, по крайней мере, примеры, которые я видел, имели бы больше смысла.
Кто-нибудь знает, как мне этого добиться? Или кто-нибудь пробовал что-то подобное в прошлом? Если у кого-то есть, выглядит ли запрос правильно или есть более чистый способ сделать это? У меня есть несколько тысяч тонких клиентов для обновления, поэтому я хотел бы, чтобы эти 100% работали, прежде чем я начну обновлять все тонкие клиенты!
С уважением,
Philb