@dba_ru

Страница 79 из 718
Cyber
26.12.2016
15:15:14
Запрос не совпадает с выводом на скрине
Запрос изначальный - просто выборка данных из таблиц. Он действительно нужен? Я скрин просто привел как выглядит у меня дублирование. Вывод от запроса, который я предоставил прилагаю.

Vladislav
26.12.2016
15:16:00
Вы определитесь, какую проблему решаем и такой запрос и давайте...

а то запрос один, а проблему решаем в другом запросе...

Cyber
26.12.2016
15:16:52
Проблема именно в приведенном запросе, тот скрин я для пояснения приложил, но внёс смуту, прошу прощения.

Google
Vladislav
26.12.2016
15:17:42
в запросе, который вы написали, проблем с дублированием нет

Cyber
26.12.2016
15:19:20
В выводе - нет. Он именно суммирует дубликаты. На первом скрине видно, что для клиента повторяются услуги два раза и два раза одни и те же материалы. Т.е реальная стоимость будет в два рааз меньше, чем та, которую я получаю из запроса.

Vladislav
26.12.2016
15:22:59
если структура не кривая, то мне кажется касяк в джойнах

все таки покажите запрос под этот скрин

Cyber
26.12.2016
15:25:59
SELECT dbo.Клиенты.ФИО_клиента, dbo.Услуги.Название_услуги, dbo.КлиентыУслуги.Количество_услуг, dbo.Материалы1.Название_материала, dbo.КлиентыМатериалы.Количество_материала FROM dbo.Клиенты INNER JOIN dbo.КлиентыМатериалы ON dbo.Клиенты.Код_клиента = dbo.КлиентыМатериалы.Код_Клиента INNER JOIN dbo.КлиентыУслуги ON dbo.Клиенты.Код_клиента = dbo.КлиентыУслуги.Код_Клиента INNER JOIN dbo.Материалы1 ON dbo.КлиентыМатериалы.Код_Материала = dbo.Материалы1.Код_материала INNER JOIN dbo.Услуги ON dbo.КлиентыУслуги.Код_Услуги = dbo.Услуги.Код_услуги

Vladislav
26.12.2016
15:27:52
хм, оригинальная структура...

разбивайте услуги и материалы

Cyber
26.12.2016
15:28:56
Отдельно просуммировать имеете в виду? или как?

Хотя, это может быть выход.

Vladislav
26.12.2016
15:29:35
отдельно находите сумму по материалам для клиента и отдельно сумму по услугам

а потом суммируете

Cyber
26.12.2016
15:30:16
Да-да, кажется, я понял. Сейчас уже домучаюсь с частью клиентского приложения и опробую, спасибо.

Vladislav
26.12.2016
15:30:28
у вас материалы и услуги не согласованы, поэтому происходит связь M:M

Google
Vladislav
26.12.2016
15:32:20
SELECT dbo.Клиенты.ФИО_клиента, dbo.Услуги.Название_услуги, dbo.КлиентыУслуги.Количество_услуг, dbo.Материалы1.Название_материала, dbo.КлиентыМатериалы.Количество_материала FROM dbo.Клиенты INNER JOIN dbo.КлиентыМатериалы ON dbo.Клиенты.Код_клиента = dbo.КлиентыМатериалы.Код_Клиента INNER JOIN dbo.Материалы1 ON dbo.КлиентыМатериалы.Код_Материала = dbo.Материалы1.Код_материала INNER JOIN UNION ALL SELECT dbo.Клиенты.ФИО_клиента, dbo.Услуги.Название_услуги, dbo.КлиентыУслуги.Количество_услуг, dbo.Материалы1.Название_материала, dbo.КлиентыМатериалы.Количество_материала FROM dbo.Клиенты INNER JOIN dbo.КлиентыУслуги ON dbo.Клиенты.Код_клиента = dbo.КлиентыУслуги.Код_Клиента INNER JOIN dbo.Услуги ON dbo.КлиентыУслуги.Код_Услуги = dbo.Услуги.Код_услуги

Вот например

логически, у вас что услуга, что материал - это равноценные позиции, а вы пытаетесь использовать их как одно подмножество другово

Cyber
26.12.2016
15:35:18
Вообще, изначально, я хотел все сделать по-другому, но меня буквально заставили делать так. Теперь вот и приходится страдать немного :) Спасибо за помощь, скоро вернусь к этому, надеюсь все получится.

Vladislav
26.12.2016
15:37:26
SELECT Клиенты.ФИО_клиента, SUM(xz.Cтоимость) AS Cтоимость FROM Клиенты INNER JOIN ( SELECT КлиентыУслуги.Код_Клиента, SUM(Услуги.Стоимость_услуги_руб*КлиентыУслуги.Количество_услуг) AS Cтоимость FROM КлиентыУслуги INNER JOIN Услуги ON КлиентыУслуги.Код_Услуги = Услуги.Код_услуги GROUP BY Клиенты.Код_клиента UNION ALL SELECT КлиентыМатериалы.Код_Клиента, SUM(КлиентыМатериалы.Количество_материала*Материалы1.Цена_за_единицу) AS Cтоимость FROM КлиентыМатериалы INNER JOIN Материалы1 ON КлиентыМатериалы.Код_Материала = Материалы1.Код_материала INNER JOIN GROUP BY КлиентыМатериалы.Код_Клиента ) AS xz ON Клиенты.Код_клиента = xz.Код_Клиента

Вот так

Запрос не блещет скоростью, нужна будет оптимизация, то тогда убирайте группировки из подзапроса и выносите в основной запрос

Dmitry
26.12.2016
15:38:24
но вообще надо делить да

сущности разные

Vladislav
26.12.2016
15:39:16
ну можно is_service какйонеть внести еще
Вот ты сейчас решил на пустом месте запилить триггер, который будет чекать всегда и только нагружать систему, вместо просто логического запроса ?

Dmitry
26.12.2016
15:40:02
да я не настаиваю что это лучшее решение

но так как есть еще хуже

Cyber
26.12.2016
15:40:12
Запрос не блещет скоростью, нужна будет оптимизация, то тогда убирайте группировки из подзапроса и выносите в основной запрос
Скорость мне не важна, это для зачета, им пойдет и неоптимизированное. А чисто для себя уже сил не хватит. Ибо почти 4 часа утра.

Maxim
27.12.2016
10:02:35
всем привет!

гуру ДБА, подскажите, а как можно удалить все строки оставив лишь последние N штук?

here1am
27.12.2016
10:04:25
делит фром тэйбл ордер бай ид деск лимит эн?

Anton
27.12.2016
10:05:05
create table as select + drop + rename

here1am
27.12.2016
10:05:27
а, нет. в гугле советуют подзапросы

Maxim
27.12.2016
10:06:50
Google
Vladislav
27.12.2016
10:13:42
Vladislav
27.12.2016
10:15:23
потому что нет определения, что считать последними строками

последние вставленные, последние измененые, последние по значению даты в одном из столбцов?

Maxim
27.12.2016
10:17:14
в моем случае самый последний - это самый большой id (auto_increment)

Vladislav
27.12.2016
10:18:11
так и думал, что так ответите, надеюсь у вас нет вставки данных с этим самым id, в противном случае вас ждут удивительные результаты

Maxim
27.12.2016
10:19:48
уточню, спасибо

Fike
27.12.2016
10:40:05
в базе данных нет понятия порядка строк

пока ордер бая нет, она имеет право возвращать любой порядок

Vladislav
27.12.2016
10:43:16
в базе данных нет понятия порядка строк
зависит от базы, но по определению да, рандом

Кротобедонтий
27.12.2016
10:47:00
пока ордер бая нет, она имеет право возвращать любой порядок
А я думал по сортировке первичного ключа по умолчанию. Не?

Кротобедонтий
27.12.2016
10:47:30
Если имеется такой

Vladislav
27.12.2016
10:48:26
вообще нет

чаще всего по вставке

Fike
27.12.2016
11:17:54
A cursor in the open state identifies a table, an ordering of the rows of that table, and a position relative to that ordering. If the <declare cursor> does not include an <order by clause>, or includes an <order by clause> that does not specify the order of the rows completely, then the rows of the table have an order that is defined only to the extent that the <order by clause> specifies an order and is otherwise implementation-dependent.

"думал" и "предполагал" - это вообще плохие слова в этой отрасли

Akzhan
27.12.2016
20:51:49
говоря проще, в каком порядке проще было вернуть, в таком и вернет. можно много говорить о том, какой порядок более дешев при работе с B+-trees и MVCC etc., но факт в том, что он для пользователя случаен и может меняться между транзакциями

например, одна СУБД при наличии limit сперва вернет те листья дерева, которые случайно есть в памяти

Google
Akzhan
27.12.2016
20:57:14
и будет абсолютно права

Andrey
27.12.2016
21:33:47
Может кто-нибудь подсказать по mysql (5.7)? Какой-нибудь параметр или механизм защиты от подбора пароля. Безопасники брутфорсят пароль, при этом СУБД начинает тупить.

Anton
27.12.2016
22:01:06
fail2ban mysql + google

Fike
27.12.2016
22:02:42
угу, попробуй выполнить этот запрос

там найдешь кучу заметок о том, что это нерабочая связка

Admin
ERROR: S client not available

Fike
27.12.2016
22:06:43
я так понял, что безопасники - это внутренний отдел, которые по умолчанию во всех белых списках

и автор вопроса просто хочет магию, которая при большом количестве попыток логинов не будет снижать производительность сервера

KOT
27.12.2016
22:09:27
Подлючения к базе должны идти в порядке запрет всем, открыть только списку: список должен включать себя только те конкретный ИП (не подсети), конкретных серверов, которым вы хотите разрешить доступ к ДБ

Al
28.12.2016
00:08:15
Четам?

KOT
28.12.2016
00:14:22
Я проскролил... похоже на его же книгу по перформансам, но в ужатом формате для детей )

Но по крайне мере легче понимать некоторые вещи по рисункам

Al
28.12.2016
00:20:26
Andrey
28.12.2016
04:01:36
Я знаю про fail2ban и просто про iptables. Но они безопасник должны иметь возможность подбирать пароль, но хотелось бы, чтоб СУБД при этом не падал.

Dmitry
28.12.2016
05:34:21
Так они на вопрос "что делаете", всегда могут ответить - "пароли подбираем"

Google
Evgeny
28.12.2016
05:36:40
Можно еще ебать человека, чей пароль они подобрали

А ваще можно настроить репликацию паролей и пусть они на другом инстансе подбирают

Evgeny
28.12.2016
05:46:09
Чтобы безопасности могли брутить пароли

zerc
28.12.2016
05:49:47
должны ли безопасники заниматся соц.инженирингом

ну типа проверять сотрудников компании

просить выгрузить какую нибудь инфу

или расказать что то

Al
28.12.2016
06:06:47
Я чет окончательно окосел от вашей порнографии. Если чего то там безопасникам или кому еще зачесалось. Пусть им пишут веб интерфейс по их тз. Накой хер давать прямой доступ к базе хер пойми кому для хер пойми каких нужд. Вы им еще рут тогда раздавайте.

Маразм

Al
28.12.2016
06:26:00
зачем и рута давать. пусть сами подбирают
А зачем доступ к базе для подбирания пароля

Vladislav
28.12.2016
06:50:34
Я знаю про fail2ban и просто про iptables. Но они безопасник должны иметь возможность подбирать пароль, но хотелось бы, чтоб СУБД при этом не падал.
Позиция не логичная... Объясняется легко, если безопасники считают, что пароль может быть уязвим, то пускай тогда тестируют весь фронт работ, начиная от обхода блокировок и прочего...

Страница 79 из 718