С лайком у меня только 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
Этот топик читают: Гость
Ответов: 952
Рейтинг: 4
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
UPDATE tab SET fio1=fio1||","||fio2||","||fio3||","||fio4
|
|||
карма: 25 |
|
Ответов: 952
Рейтинг: 4
|
|||
Есть ли возможность оформить в 1 запрос следующие команды?
UPDATE note SET fioisp1="Петров" WHERE fioisp1="Иванов"; UPDATE note SET fioisp2="Петров" WHERE fioisp2="Иванов"; UPDATE note SET fioisp3="Петров" WHERE fioisp3="Иванов"; |
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Походу, решение когда исполнители заданы в 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 |
|||
карма: 26 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Netspirit писал(а): Одним запросом (если в SQLite есть функция iif())Netspirit писал(а): Должны быть "таблица сотрудников", "таблица заказов" и "таблица исполнителей" - связь "ИД заказа -> ИД сотрудника".Редактировалось 1 раз(а), последний 2019-03-23 17:31:34 |
|||
карма: 25 |
|
Ответов: 107
Рейтинг: 0
|
|||
Ребята помогите пожалуйста с запросом к БД на поиск и замену совпадений по нескольким полям одновременно. По одному полю с поиском и заменой проблем нет никаких, но вот искать сразу в нескольких что то не получается
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Для одного поля достаточно
|
|||
карма: 25 |
|
Ответов: 107
Рейтинг: 0
|
|||
Tad писал(а): Судя по кавычкам в запросе, у тебя неправильно спроектирована БД.Все работает так, я сделал пока на 6 запросов, как это сделать в одном не доходит, уже 100000 вариантов перепробовал |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
1. LIKE - очень затратная (по времени) операция.
2. Покажи своё CREATE TABLE allpost(....); Редактировалось 4 раз(а), последний 2020-06-18 11:11:42 |
|||
карма: 25 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Редактировалось 1 раз(а), последний 2020-06-18 11:20:13 |
|||
карма: 26 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Netspirit,вот это твоё выше, извини, не знаю как назвать, в SQLite (сегодня) выглядит так:
|
|||
карма: 25 |
|
Ответов: 4628
Рейтинг: 749
|
|||
А замена где? То-есть, чтобы если поле не содержит '%1', то его значение не менять.
Редактировалось 1 раз(а), последний 2020-06-18 12:39:28 |
|||
карма: 26 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Замена здесь |
|||
карма: 25 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Это если поля "равны". А если должно быть "поле содержит"?
Если у него в поле значения: "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 |
|||
карма: 26 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Netspirit, у germes5558 всё если.
|
|||
карма: 25 |
|