Вверх ↑
Этот топик читают: Гость
Ответов: 936
Рейтинг: 4
#1591: 2019-02-13 22:53:36 ЛС | профиль | цитата
С лайком у меня только 1 проблема пока - регистрозависимость.
БД перевел в UTF8.
Пример моей таблицы выше был дан лишь для примера.
В реале эта таблица и есть полная запись данных по заказу. 4 столбца которой выделены под Фамилии исполнителей.
CREATE TABLE tab (
id INTEGER,
nomerz TEXT,
obekt TEXT,
adress TEXT,
....
fio1 TEXT,
fio2 TEXT,
fio3 TEXT,
fio4 TEXT,
dogr TEXT,
....
);
Возникла нужда ставить на заказ больше 4 исполнителей, посему подумал, что Фамилии любого кол-ва исполнителей можно указывать в 1 ячейке записи. Таким образом оптимизируя конструкцию запроса, который сегодня выглядит примерно так " WHERE fio1='Иванов П.С' OR fio2='Иванов П.С' OR fio3='Иванов П.С' OR fio4='Иванов П.С'..." или так " WHERE fio1 LIKE '%Иванов%' OR fio2 LIKE '%Иванов%' OR fio3 LIKE '%Иванов%' OR fio4 LIKE '%Иванов%'... " Так как Иванов П.С. может быть в любой ячейке fio1-fio4.
Так вот сейчас стоит задача объединить данные за прошедшие ячеек fio1-fio4 в столбец fio1 , и удалить после этого ненужные столбцы fio2-fio4 из БД.

Редактировалось 2 раз(а), последний 2019-02-13 22:57:22
карма: 0

0
Ответов: 16884
Рейтинг: 1237
#1592: 2019-02-14 07:43:21 ЛС | профиль | цитата
UPDATE tab SET fio1=fio1||","||fio2||","||fio3||","||fio4
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 936
Рейтинг: 4
#1593: 2019-03-21 09:07:31 ЛС | профиль | цитата
Есть ли возможность оформить в 1 запрос следующие команды?
UPDATE note SET fioisp1="Петров" WHERE fioisp1="Иванов";
UPDATE note SET fioisp2="Петров" WHERE fioisp2="Иванов";
UPDATE note SET fioisp3="Петров" WHERE fioisp3="Иванов";
карма: 0

0
Ответов: 4309
Рейтинг: 670
#1594: 2019-03-21 11:43:40 ЛС | профиль | цитата
Походу, решение когда исполнители заданы в 4-х колонках - не очень хорошее. Должны быть "таблица сотрудников", "таблица заказов" и "таблица исполнителей" - связь "ИД заказа -> ИД сотрудника".

Одним запросом (если в SQLite есть функция iif()):
UPDATE note
set
fioisp1 = iif(fioisp1="Иванов", "Петров", fioisp1),
fioisp2 = iif(fioisp2="Иванов", "Петров", fioisp2),
fioisp3 = iif(fioisp3="Иванов", "Петров", fioisp3)


Редактировалось 2 раз(а), последний 2019-03-21 16:10:26
карма: 23

0
Ответов: 16884
Рейтинг: 1237
#1595: 2019-03-23 17:30:33 ЛС | профиль | цитата
Netspirit писал(а):
Одним запросом (если в SQLite есть функция iif())
iif в SQLite нет.

Netspirit писал(а):
Должны быть "таблица сотрудников", "таблица заказов" и "таблица исполнителей" - связь "ИД заказа -> ИД сотрудника".



Редактировалось 1 раз(а), последний 2019-03-23 17:31:34
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 98
Рейтинг: 0
#1596: 2020-06-17 21:05:01 ЛС | профиль | цитата
Ребята помогите пожалуйста с запросом к БД на поиск и замену совпадений по нескольким полям одновременно. По одному полю с поиском и заменой проблем нет никаких, но вот искать сразу в нескольких что то не получается


UPDATE allpost SET files= REPLACE(files,'%1','%2') WHERE files LIKE '%1'
карма: 0

0
Ответов: 16884
Рейтинг: 1237
#1597: 2020-06-18 08:16:22 ЛС | профиль | цитата
Для одного поля достаточно

UPDATE allpost SET files='%2' WHERE files='%1';
Судя по кавычкам в запросе, у тебя неправильно спроектирована БД.
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 98
Рейтинг: 0
#1598: 2020-06-18 10:23:22 ЛС | профиль | цитата
Tad писал(а):
Судя по кавычкам в запросе, у тебя неправильно спроектирована БД.

Все работает так, я сделал пока на 6 запросов, как это сделать в одном не доходит, уже 100000 вариантов перепробовал
карма: 0

0
Ответов: 16884
Рейтинг: 1237
#1599: 2020-06-18 11:00:30 ЛС | профиль | цитата
1. LIKE - очень затратная (по времени) операция.
2. Покажи своё CREATE TABLE allpost(....);

Редактировалось 4 раз(а), последний 2020-06-18 11:11:42
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4309
Рейтинг: 670
#1600: 2020-06-18 11:19:39 ЛС | профиль | цитата
UPDATE allpost
SET
files = REPLACE(files,'%1','%2'),
files2 = REPLACE(files2,'%1','%2'),
files3 = REPLACE(files3,'%1','%2');

Редактировалось 1 раз(а), последний 2020-06-18 11:20:13
карма: 23

0
Ответов: 16884
Рейтинг: 1237
#1601: 2020-06-18 12:04:27 ЛС | профиль | цитата
Netspirit,вот это твоё выше, извини, не знаю как назвать, в SQLite (сегодня) выглядит так:

UPDATE allpost SET (files, files2, files3) ='%2'; 
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4309
Рейтинг: 670
#1602: 2020-06-18 12:38:24 ЛС | профиль | цитата
А замена где? То-есть, чтобы если поле не содержит '%1', то его значение не менять.

Редактировалось 1 раз(а), последний 2020-06-18 12:39:28
карма: 23

0
Ответов: 16884
Рейтинг: 1237
#1603: 2020-06-18 13:02:44 ЛС | профиль | цитата
Замена здесь
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 4309
Рейтинг: 670
#1604: 2020-06-18 13:16:39 ЛС | профиль | цитата
Это если поля "равны". А если должно быть "поле содержит"?
Если у него в поле значения:

"C:\users\user1\img1.jpg"
"C:\users\user2\note.txt"
"D:\uploads\user3\data.bin"

и в записях, содержащих "C:\users", надо заменить "C:\users" на "D:\uploads"?

Редактировалось 1 раз(а), последний 2020-06-18 13:18:18
карма: 23

0
Ответов: 16884
Рейтинг: 1237
#1605: 2020-06-18 13:21:34 ЛС | профиль | цитата
Netspirit, у germes5558 всё если.
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)