@mysql_ru

Страница 55 из 142
lost
09.08.2017
09:59:40
выбирай что больше нравится

Danil
09.08.2017
10:01:53
джон я не понимаю как сделать тут ибо условие для селекта есть один из результатов вложенного селекта. про IN сейчас почитаю

короче с IN запрос ошибку не выдает, но возвращает опять 1 запись а не таблицу результатов ((((

короче вроде простая задача и никакого простого решения ( все примеры что я нашел какие то монструозные с мегаджойнами и прочим.

Google
lost
09.08.2017
10:56:11
задача простая, только поставлена некорректно и не хватает исходных данных

Danil
09.08.2017
11:43:28
вот такой запрос работает, но только если второй запрос возвращает один столбец (( и еще лезут NULL для значений 'StencilNo' из второй таблицы если их нет в первой

SELECT * , ( SELECT sum( useCount ) FROM stencil_history WHERE stencil_history.StencilNo = view_stencil_list_in_use.StencilNo ) FROM view_stencil_list_in_use

если возвращать несколько полей ругается - я не пойму почему

Dmitriy
09.08.2017
11:44:53
чот уже изврат какой-то

lost
09.08.2017
11:46:50
точно по той же причине, 1 значение скалярный подзапрос должен возвращать

Danil
09.08.2017
11:47:49
задача простая, только поставлена некорректно и не хватает исходных данных
я выше описал задачу вроде с подробностями. есть исходные 2 таблицы. в первой список предметов с несколькими параметрами. во второй история операций с этими предметами. ключевым является имя предмета - поле 'StencilNo'. нужно из первой сделать список в котором параметр 'InUse' = 'USE' и из второй вытащить значения параметров 'Tension1' ... 'Tension5' и сумму по полю 'Count'

у меня есть запрос (и вьюшка) для выборки из первой таблицы есть рабочий запрос, который выдает строку из второй таблицы по конкретному 'StencilNo'

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

и я не знаю как мне сделать итерацию сторого запроса по результату первого селекта

надеюсь так понятно

вот такие селекты: 1) SELECT id,StencilNo,Chassis,Side,MakeDate,BarePCB,Thickness,InDate,StorageNo FROM stencil_list WHERE Status = 'Use'

2) SELECT StencilNo , Tension1 , Tension2 , Tension3 , Tension4 , Tension5 , sum( useCount ) FROM stencil_history WHERE StencilNo = '1234567890' ORDER BY id DESC LIMIT 1

Google
Danil
09.08.2017
11:52:33
всмысле неверный? он возвращает мне именно нужный результат

я проверял на своих данных - все сходится

lost
09.08.2017
11:53:06
у тебя возвращаются колонки, не перечисленные в агрегатной функции, мускуль имеет полное право вернуть случайное значение в эту колонку :)

lost
09.08.2017
11:54:22
хотя там лимит 1 есть...

Danil
09.08.2017
11:54:51
формально он должен вернуть сумму по Count со всей таблицы - это правильно, и значения tension1~Tension5 для записи с максимальным id - т.е. последней, и это тоже правильно

но вот мне нужно пройтись циклом по всему списку 'StencilNo' из другой таблицы и объединить результаты

и вот тут я и застрял

lost
09.08.2017
11:56:40
а зачем тебе limit 1 если ты выбираешь сумму по уникальному stencilNo

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

SELECT s.StencilNo , SUM(s.useCount) FROM stencil_history s JOIN stencil_list ss ON s.StencilNo = ss.StencilNo WHERE ss.Status = 'USE' GROUP BY 1 почему бы не сделать так

Danil
09.08.2017
12:08:54
а зачем тебе limit 1 если ты выбираешь сумму по уникальному stencilNo
потому что записей с таким полем stencilno много а мне нужна последняя только

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

lost
09.08.2017
12:10:50
потому что записей с таким полем stencilno много а мне нужна последняя только
да вы не знаете порядок выполнения операторов, Батенька

Danil
09.08.2017
12:14:22
а кстати поиск в mysql case sensitive? или это зависит от настроек таблицы?

типа UTF8_CI или _CS?

lost
09.08.2017
12:14:41
поиск чего? строковых значений?

Google
Danil
09.08.2017
12:14:57
ну вот сравнение строк в селектах?

типа USE и Use одинаково или нет

lost
09.08.2017
12:15:41
зависит от того как сохраняешь

Danil
09.08.2017
12:15:59
да вы не знаете порядок выполнения операторов, Батенька
а вот это вполне может быть, я не на столько профи в SQL ((

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

вот тут у меня идеи и кончаются (

единичный рабочий запрос такой SELECT StencilNo , Tension1 , Tension2 , Tension3 , Tension4 , Tension5 FROM stencil_history WHERE StencilNo = 'ХХХХХХХХХ' ORDER BY DESC LIMIT 1

как такое заджойнит я хз

просто в этом запросе забирается именно самая свежая запись

lost
09.08.2017
12:25:56
SELECT s.StencilNo , SUM(s.useCount), SUBSTRING_INDEX(GROUP_CONCAT(s.Tension1 ORDER BY s.id DESC), ',', 1) AS Tension1, SUBSTRING_INDEX(GROUP_CONCAT(s.Tension2 ORDER BY s.id DESC), ',', 1) AS Tension2, SUBSTRING_INDEX(GROUP_CONCAT(s.Tension3 ORDER BY s.id DESC), ',', 1) AS Tension3 FROM stencil_history s JOIN stencil_list ss ON s.StencilNo = ss.StencilNo WHERE ss.Status = 'USE' GROUP BY 1

немного магии

Danil
09.08.2017
12:28:39
мматерь божья 0_о еще бы понять что делает: SUBSTRING_INDEX(GROUP_CONCAT(s.Tension1 ORDER BY s.id DESC), ',', 1) AS Tension1

Vlad
09.08.2017
12:29:01
Всем привет... Выбрать значения из нескольких таблиц через джоин или селект правильней?

есть в таблице список материалов, по остальным таблицам их доп характеристики. Вывел в таблице использовав join ... говорят правильней через селект... Решил спросить у гуру...

Vlad
09.08.2017
12:33:27
так и сделал... но говорят что правильней через селект...

Vlad
09.08.2017
12:33:59
и ещё вопрос...

Danil
09.08.2017
12:35:02
можно ли во вью добавить вычисляемые поля? можно ли добавить в селект/джоин/вью поля с заданным значением (константа)?

Magic
09.08.2017
12:35:04
left join должен помочь
Зачем left join когда одним select ом можно обойтись? Есть бенчмарки что лучше и быстрее?

Google
Vlad
09.08.2017
12:35:05
ид материала это одна таблица.. а во второй: ид1 / значение 1 ид1 /значение 2 ид2 / значение 1 ид2 /значение 2 Это то как включить в результат запроса?

lost
09.08.2017
12:35:38
Зачем left join когда одним select ом можно обойтись? Есть бенчмарки что лучше и быстрее?
потому что я задумался о ситуации, когда у материала нет характеристик, например

Vlad
09.08.2017
12:36:10
вы меня опять путаете... джоин или селект?

Vlad
09.08.2017
12:38:05
как из второй таблицы вытянуть 2 значения...

lost
09.08.2017
12:39:28
а значений может быть от 0 до N ?

Danil
09.08.2017
12:39:45
а чё нет?
ну с вычисляемыми я уже гуглю, а вот как быть с константами? как можно прописать выдачу текстового значения поля по условию - типа если >5 то пишем 'GOOD' если меньше то 'BAD' ?

Vlad
09.08.2017
12:41:25
у каждого значения есть доп_ид

Danil
09.08.2017
12:41:58
ок, пошел в гугл. спасибо! а это все не сильно нагружает сервак? насколько такие вычисления дороги в плане ресурсов? как я понимаю наиболее "дорога" именно выборка из БД так как ИО и прочие операции. математика же семечки для проца. это так?

Danil
09.08.2017
12:43:59
ну я в плане того, когда стоит остановится и пренести обработку данных уже в логику приложения и забирать кучу простыми селектами

lost
09.08.2017
12:43:59
на примере твоего запроса - самое дорогое будет group_concat

Danil
09.08.2017
12:44:35
я кстати, так и не вкурил как именно оно работает (

Danil
09.08.2017
12:46:09
чем быстрее - тем лучше
ну написать эту логику в приложении тоже не мнгновенно. если БД отдает уже готовые форматированные данные то это ооочень удобно. а вот реализовать внутри приложения функции встроенные в MySQL как то глупо КМК

lost
09.08.2017
12:47:50
достаточно просто узнать те вещи, которые не стоит делать средствами sql

Google
Danil
09.08.2017
12:49:07
например какие? если не сложно написать

lost
09.08.2017
12:52:02
полнотекстовый поиск, например

Danil
09.08.2017
12:54:13
короче разобрал магические записи по частям: SUBSTRING_INDEX(GROUP_CONCAT(s.Tension1 ORDER BY s.id DESC), ',', 1) AS Tension1 похоже нужно быть нехерово подкованным в SQL чтоб такое сообразить. это реально круто GROUP_CONCAT() будет тормозное если записей дохера как я понял, и осбо ускорить это не получится (( ну посмотрим, что нам сервак на это скажет. частота запросов мизерная раз в 5-10 минут, длина базы порядка 20000 записей и неспеша растет

полнотекстовый поиск, например
ну в целом понятно, но он разве не оптимизирован как то внутри БД? индексирование там какое нибудь или что то еще?

и как тогда делают посик по ключевым словам на всяких форумах там ?? ведь они все рабодают с БД, или нет?

lost
09.08.2017
12:58:41
ну в целом понятно, но он разве не оптимизирован как то внутри БД? индексирование там какое нибудь или что то еще?
он реализован, но реалии жестокого мира показывают, что это работает не так хорошо как хотелось бы

Danil
09.08.2017
13:49:52
короче сджойнил я 2 вьюшки в 3ю и все запллясало как надо. lost soul - спасибо большое за помощь!

Vlad
09.08.2017
13:55:59
Лососоул .. 2е спасибо

lost
09.08.2017
13:56:08
вот ща обидно было

Vlad
09.08.2017
13:56:22
*Lost soul

Пардоньте... Автозампна на телепоне

lost
09.08.2017
13:56:58
можно вот так делать: @acromegale

Alexander
09.08.2017
15:14:12
Хелоу! кто нибудь Multi-Source репликацию настраивал?

lost
09.08.2017
15:15:21
а вы с какой целью интересуетеся?

Alexander
09.08.2017
15:16:02
да вот. хочу попробовать настроить. вроде есть где это полезно будет. пока с полтыка не получается ?

lost
09.08.2017
15:16:45
насколько я помню, там нужно делать change master в отдельный канал репликации

и собстно на этом все трудности настройки...

Страница 55 из 142