Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
Подскажите, как правильно сделать один запрос вместо этого? UPDATE table SET column='test' WHERE column_field='field_1'; UPDATE table SET column='hello' WHERE column_field='field_2'; UPDATE table SET column='world' WHERE column_field='field_3'; Значение в столбце column должно меняться в зависимости от значения в столбце column_field ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 21:32 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
Очевидно, следует описать эту зависимость функцией или таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 23:03 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
Если поле column_field имеет высокую селективность и на него есть индекс, то лучше оставить как есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2018, 23:53 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
AppologiesПодскажите, как правильно сделать один запрос вместо этого? UPDATE table SET column='test' WHERE column_field='field_1'; UPDATE table SET column='hello' WHERE column_field='field_2'; UPDATE table SET column='world' WHERE column_field='field_3'; Значение в столбце column должно меняться в зависимости от значения в столбце column_field Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 04:15 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
tip78AppologiesПодскажите, как правильно сделать один запрос вместо этого? UPDATE table SET column='test' WHERE column_field='field_1'; UPDATE table SET column='hello' WHERE column_field='field_2'; UPDATE table SET column='world' WHERE column_field='field_3'; Значение в столбце column должно меняться в зависимости от значения в столбце column_field Код: sql 1. 2. 3. 4. 5. 6. То что надо, а если на пример мне необходимо ставить значение (field_1/field_2/field_3) сразу в 2 разных столбца, то есть дублировать, то использовать нечто похожее на это? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Либо можно в запросе как то сделать просто дублирование значений сразу в 2 колонки (значения будут одинаковые) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 14:34 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
В общем, да, устанавливаемые значения для каждого поля нужно перечислять. Другое дело, откуда их брать. При небольшом количестве варианты можно явно перечислить в запросе. Собственно, как в примере из первого поста - три варианта и одно поле для обновления. При использовании одинаковых замен в двух и более местах можно сделать пользовательскую функцию, которая будет возвращать значения в соответствии с аргументом и вызывать её многократно. Или же, перечислить соответствия в дополнительной таблице, вроде справочника, назовем её `dop`: arg | resultfield1 | testfield2 | hellofield3 | word Тогда можно брать соответствия так примерно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 15:06 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
AppologiesТо что надо, а если на пример мне необходимо ставить значение (field_1/field_2/field_3) сразу в 2 разных столбца, то есть дублировать, то использовать нечто похожее на это? попробуйте col2 = col но это не точно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 15:14 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
tip78попробуйте col2 = col но это не точноВторым запросом - точно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 15:27 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
По итогу получается вот что. В общем задача стоит в том, что бы установить значение в двух полях на основе значений из третьего. Но, если этих совпадений не найдено, необходимо устанавливать определенное число а не NULL. Такой запрос будет корректный или это костыль? [sql]-- Устанавливаем значение в 1 столбец исходя из 3 столбца UPDATE xf_user SET user_group_id = (CASE faction WHEN 'LSPD' THEN '27' WHEN 'SFPD' THEN '28' WHEN 'FBI' THEN '29' WHEN 'Area 51 Army' THEN '32' WHEN 'Grove Street Gang' THEN '34' WHEN 'Emergency Medical Services' THEN '31' WHEN 'Los Lantos Vagos Gang' THEN '35' WHEN 'LS News' THEN '30' WHEN 'The Ballas Gang' THEN '33' WHEN 'The Rifa Gang' THEN '37' WHEN 'Varrios Los Aztecas' THEN '36' WHEN faction='Грузчик' THEN '2' WHEN faction='Фермер' THEN '2' WHEN faction='Шахтер' THEN '2' WHEN faction='Уборщик улиц' THEN '2' WHEN faction='Строитель' THEN '2' WHEN faction='Таксист' THEN '2' WHEN faction='Развозчик пиццы' THEN '2' WHEN faction='Уличный торговец' THEN '2' WHEN faction='Мусорщик' THEN '2' WHEN faction='Водитель автобуса' THEN '2' WHEN faction='Развозчик продуктов' THEN '2' WHEN faction='Инкассатор' THEN '2' WHEN faction='Водитель погрузчика' THEN '2' WHEN faction='Механик' THEN '2' WHEN faction='Прораб' THEN '2' WHEN faction='Ремонтник дорог' THEN '2' WHEN faction='Механик' THEN '2' WHEN faction='Дальнобойщик' THEN '2' WHEN faction='Эвакуаторщик' THEN '2' WHEN faction='Безработный' THEN '2' WHEN faction='Преступник' THEN '2' END) WHERE faction IN ('LSPD','SFPD','FBI','Area 51 Army','Grove Street Gang','Emergency Medical Services','Los Lantos Vagos Gang','LS News','The Ballas Gang','The Rifa Gang','Varrios Los Aztecas'); -- Дублируем значение из 1 столбца во второй столбец UPDATE xf_user SET user_group_id = display_style_group_id WHERE faction IN ('LSPD','SFPD','FBI','Area 51 Army','Grove Street Gang','Emergency Medical Services','Los Lantos Vagos Gang','LS News','The Ballas Gang','The Rifa Gang','Varrios Los Aztecas'); -- Устанавливаем значение "2" в 1 столбец, если в 3 не найдено определенных совпадений UPDATE xf_user SET user_group_id = '2' WHERE faction NOT IN ('LSPD','SFPD','FBI','Area 51 Army','Grove Street Gang','Emergency Medical Services','Los Lantos Vagos Gang','LS News','The Ballas Gang','The Rifa Gang','Varrios Los Aztecas'); -- Дублируем значение "2" во 2 столбец, если в 3 не найдено определенных совпадений UPDATE xf_user SET user_group_id = display_style_group_id WHERE faction NOT IN ('LSPD','SFPD','FBI','Area 51 Army','Grove Street Gang','Emergency Medical Services','Los Lantos Vagos Gang','LS News','The Ballas Gang','The Rifa Gang','Varrios Los Aztecas');[/sql] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 16:37 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
Прошу прощения за портянки. Не могу отредактировать предыдущее сообщение. По итогу получается вот что. В общем задача стоит в том, что бы установить значение в двух полях на основе значений из третьего. Но, если этих совпадений не найдено, необходимо устанавливать определенное число а не NULL. Такой запрос будет корректный или это костыль? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 16:51 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
Appologiesесли этих совпадений не найдено, необходимо устанавливать определенное число а не NULL. Такой запрос будет корректный или это костыль?Никаких костылей. Есть ELSE для задания дефолтового значения, это штатный функционал CASE. Загляните в доку https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 17:33 |
|
||
|
Помогите оптимизировать запрос UPDATE
|
|||
|---|---|---|---|
|
#18+
эту всю дичь в таблицу запихните и тогда: Код: sql 1. 2. 3. пару замечаний: больше ID-шников, в жопу слова; есть смысл на группы поделить, вместо перечисления всего списка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 22:14 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39638494&tid=1829879]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 140ms |

| 0 / 0 |
