
Igor
10.05.2018
06:56:57
Всем привет! Подскажите тузлу, которая позволяет строить планы запросов как студия MS SQL, только для больших процедур, потому как студия не отображает полностью план процедуры.

Samat
10.05.2018
07:48:15
ребят, правильный ли запрос?
DELETE l1 FROM leads l1 LEFT JOIN statuses s1 ON l1.status_id = s1.id, leads l2 LEFT JOIN statuses s2 ON l2.status_id = s2.id WHERE l1.id > l2.id AND l1.phone = l2.phone AND s1.pipeline_id = s2.pipeline_id
нужно удалить из leads все с одинаковым phone и заджойненным pipeline_id из statuses, кроме самого первого из повторных

Vladislav
10.05.2018
07:55:37

Эльвира
10.05.2018
09:58:10
добрый день)

Google

Vladislav
10.05.2018
09:58:43
добрый, dba-user

Ilia
10.05.2018
10:00:24
ребят, правильный ли запрос?
DELETE l1 FROM leads l1 LEFT JOIN statuses s1 ON l1.status_id = s1.id, leads l2 LEFT JOIN statuses s2 ON l2.status_id = s2.id WHERE l1.id > l2.id AND l1.phone = l2.phone AND s1.pipeline_id = s2.pipeline_id
нужно удалить из leads все с одинаковым phone и заджойненным pipeline_id из statuses, кроме самого первого из повторных
0) какой-то миск из JOIN-ов и перечисления таблиц через запятую во FROM... Как минимум, это нечитаемо, как максимум, СУБД не поймёт.
1) LEFT JOIN - неправильно использовать тут, потому что ты фильтруешь записи тут, потому что у тебя DELETE, а внешний JOIN НЕ ПОДРАЗУМЕВАЕТ фильтрацию.
По факту у тебя JOIN ВСЁ РАВНО НЕ ВНЕШНИЙ, поскольку поля обеих таблиц участвуют в WHERE.
Подозреваю, что логика запроса также может быть нарушена.


Igor
10.05.2018
10:51:51

Ilia
10.05.2018
10:53:02
Поправь лучше начальное сообщение.

ко?TEXHIK
10.05.2018
11:01:02
Что-то я туплю. Можно определение триггера вытащить как-то в постгресе? чтоб не ручками строить, а готовое? Ато гуглится только как процедуру достать,а она мне как раз нафиг не сдалась
или только руками пересобирать на основе information_schema.triggers?

Anton
10.05.2018
11:16:20
information_schema.triggers - это не очень похоже на постгрес
Или там такая схема тож есть? Не припомню

ко?TEXHIK
10.05.2018
11:16:56
https://www.postgresql.org/docs/9.5/static/information-schema.html

Vladislav
10.05.2018
11:56:06

Виктор
10.05.2018
11:57:30
Дык может иньекцию просто попытались сделать?

Aleksandr
10.05.2018
12:44:00
Здравствуйте!
Я с вопросом (MsSQL2017): The specified pattern did not return any files or does not represent a valid file share. Verify the pattern parameter and rerun the command.
Сделал я аудит (в локальный файл, на одном сервере с СУБД), настроил, создал вьюху, делаю по ней клик и селект 1000 строк, а оно вот так в ответ ругается.
На другой ДБ всё завелось сразу и влёт.
Что смотреть\как дебажить?
Селект вручную через execute отрабатывает корректно.

Google

Sergey
10.05.2018
12:48:32

Aleksandr
10.05.2018
12:50:24

Sergey
10.05.2018
12:51:31

Aleksandr
10.05.2018
13:26:00

Alexander
11.05.2018
06:48:56
Всем привет.
Парни, можно ли както в MySQL сделать одним запросом такую штуку:
Есть форма для добавления книги, там есть поле "Автор", которое заполняется от руки и поля книги (title, description, ...)
Авторы и книги хранятся в разных таблицах, связаны по id <-> user_id
Надо при добавлении книги проверять наличие автора в таблице авторов и отдавать id и инсертить книгу - это решается insert from select...
А если автора нет, то надо его добавить, получить id добавленного и потом с этим id инсертить книгу.
Это в одном запросе реально или все-таки придется на несколько разбить?


ко?TEXHIK
11.05.2018
06:52:46
Всем привет.
Парни, можно ли както в MySQL сделать одним запросом такую штуку:
Есть форма для добавления книги, там есть поле "Автор", которое заполняется от руки и поля книги (title, description, ...)
Авторы и книги хранятся в разных таблицах, связаны по id <-> user_id
Надо при добавлении книги проверять наличие автора в таблице авторов и отдавать id и инсертить книгу - это решается insert from select...
А если автора нет, то надо его добавить, получить id добавленного и потом с этим id инсертить книгу.
Это в одном запросе реально или все-таки придется на несколько разбить?
Можно сделать автора уникальным и всегда инсёртить, поставив на конфликт игнор/апдейт. Но я не уверен, что это хорошая идея..

Alexander
11.05.2018
06:53:45
а... если всегда инсёртить, может как-то через транзакции можно?

ко?TEXHIK
11.05.2018
07:01:29
Ну ты по определению не сможешь сделать добавление в две таблицы одним запросос.
Но ты можешь сделать это одним обращением к базе если в нем сразу два запроса отправищь
Insert into t1 values(1,cat,15);
Insert into t2 values(dogz, Igor, 27);

Vladislav
11.05.2018
07:26:29
дружно идем читать, что такое транзакция

Ilia
11.05.2018
07:54:58


Vladislav
11.05.2018
07:56:59
надо чтобы дошло до момента написания процедуры

Ilia
11.05.2018
07:57:55
"О сколько нам ошибок трудных готовит просвещенья дух..."

Alexander
11.05.2018
07:58:05

Ilia
11.05.2018
07:58:14
mysql.com
не знаешь такой сайт?

Google

Alexander
11.05.2018
07:58:51

lost
11.05.2018
07:58:53
майсиквел дат ком

Al
11.05.2018
08:00:17

lost
11.05.2018
08:00:43

Ilia
11.05.2018
08:01:13
Йу спиик инглишь?

lost
11.05.2018
08:01:27
йес, а литл бит, ар ю?

Ilia
11.05.2018
08:02:49
https://www.youtube.com/watch?v=PZq01kQ5Pr8

Samat
11.05.2018
10:51:56
есть табличка с 3 000 000 записей.
запрос SELECT COUNT(DISTINCT lead_id) AS some_alias FROM lead_statistics WHERE is_actual in ('1', '2') and lead_statistics.created_at >= '2018-05-01 00:00:00' and lead_statistics.created_at <= '2018-05-12 00:00:00'
выполняется 6 сек. как можно ускорить?

Виктор
11.05.2018
11:06:22
EXPLAIN смотреть надо

Samat
11.05.2018
11:07:39

Виктор
11.05.2018
11:15:46
Селективность нормальная, может помочь индекс на created_at
Учтите, при большом диапазоне дат(результатирующих записей) индекс все равно откажется работать
Ну и забегая вперед, когда статистики много проще разложить в сводные таблицы в нужных разрезах

Samat
11.05.2018
11:20:57
лол, создал индекс на created_at. запрос выполнялся более 30 сек. на 30 остановил,чтобы сервак не лег)

Виктор
11.05.2018
11:23:06
Небось еще на проде выполнял, кто ж так делает

Samat
11.05.2018
11:23:50
прод и дев лежат на одном хостинге. меня за запросы к этой таблице уже блокировали

Виктор
11.05.2018
11:24:01
браво)

Vladislav
11.05.2018
11:24:56

Виктор
11.05.2018
11:24:57
Еще и хостинг. Какую вы производительность хотите в таком случае

Samat
11.05.2018
11:25:12
максимум 2 секунды)

Google

Виктор
11.05.2018
11:25:31
Если преимущественно по дате фильтруете, то можно партиционировать по ней

Artyom
11.05.2018
11:39:02
всем привет, может кто подскажет. mysql во время рековери стартует еще процессы рековери и соответственно блочит себя же.. никто не сталкивался с таким ?
такое ощущение что по таймауту что ли отваливается
доходит примерно до 40% а потом опять лсн начинает считывать стартуя перед этим процесс

Ilia
11.05.2018
12:41:38

Samat
11.05.2018
12:45:02
сейчас взял тестовый период на vps с хорошим железом. пробую залить базу и выполнить запрос

Ilia
11.05.2018
12:45:49

Artyom
11.05.2018
12:48:23
почему она удалилась хз


Vladimir
11.05.2018
13:34:38
Добрый день. Хочу написать простенькое приложение под Андроид.
Имеем ленту неких событий (изначально она одинаковая для всех пользователей), выводим их по одному от самых свежих к самым старым (DESC). Просмотренные скрываем навсегда только для конктреного пользователя, конечно.
Если использовать старую добрую MySQL, то прихоидит в голову к таблице с событиями добавить таблицу со связями между id пользователя и id просмотренно записи. После чего выбирать нужные для показа записи запросом:
SELECT t1.id, t1.values FROM t1 WHERE t2.user_id = xxx AND t1.id NOT IN (SELECT t2.id FROM t2) ORDER BY t1.id DESC LIMIT 1
Сомнения вызывает то, что 10 тыс пользователей, просмотрев по 10 тыс записей уже нагенерят 100 млн строк в t2... Будет ли это проблемой и на каком количестве?
Можно ли как-то иначе все это реализовать, чтобы использовать NoSQL (Firebase от Гугла) или из-за отсутствия аналогов NOT IN и "!=" реляционная БД будет лучше?


Ilia
11.05.2018
14:53:20
ХОчешь чтобы быстро работало — делай наоборот.
Связь для пользователя с записями, КОТОРЫЕ ЕМУ НАДО БУДЕТ ПОКАЗАТЬ!
При просмотре связь удаляется.
При добавлении события она связывается со всеми пользователями, которые заинтересованы в ней


Vladimir
11.05.2018
14:57:40
а при 15.000 записей и регистрации нового пользователя придется добавить 15.000 связей

Александр
11.05.2018
15:03:48

lost
11.05.2018
15:04:00

Александр
11.05.2018
15:04:02
и общую ленту событий

lost
11.05.2018
15:04:13
только с мелким уточнением

Google

lost
11.05.2018
15:04:26
юзверь же может смотреть не по порядку

Vladimir
11.05.2018
15:04:26

lost
11.05.2018
15:04:48
эээ, какие вы злые

Vladimir
11.05.2018
15:04:51
но он не должен увидеть одну запись дважды

Anton
11.05.2018
15:05:25

lost
11.05.2018
15:05:36
типа один раз проскролил и всё?)

Al
11.05.2018
15:05:54
"Эта запись скрыта от тебя НАВСЕГДА.. потому что ты ее уже видел" ?

Vladimir
11.05.2018
15:05:54

lost
11.05.2018
15:06:03
вообще печаль

Александр
11.05.2018
15:06:19

Vladimir
11.05.2018
15:06:38

Al
11.05.2018
15:06:59