
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

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

Cyber
26.12.2016
15:40:12

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

Maxim
27.12.2016
10:07:17

Vladislav
27.12.2016
10:13:42

Maxim
27.12.2016
10:15:03

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
угу, попробуй выполнить этот запрос
там найдешь кучу заметок о том, что это нерабочая связка

KOT
27.12.2016
22:04:07

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. Но они безопасник должны иметь возможность подбирать пароль, но хотелось бы, чтоб СУБД при этом не падал.

Al
28.12.2016
05:03:13

Evgeny
28.12.2016
05:24:56

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

Google

Evgeny
28.12.2016
05:36:40
Можно еще ебать человека, чей пароль они подобрали
А ваще можно настроить репликацию паролей и пусть они на другом инстансе подбирают

Al
28.12.2016
05:44:15
Какой-то бред

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

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

ThePanaceya
28.12.2016
06:03:13

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

Evgeny
28.12.2016
06:12:59
им*

Al
28.12.2016
06:26:00

Vladislav
28.12.2016
06:50:34

Al
28.12.2016
06:51:35