@scala_ru

Страница 111 из 1499
Vladimir
21.09.2016
13:16:39
чтоб дважды не пробегать по результату)

Anatoliy
21.09.2016
13:16:43
Цепочки будут, уже сталкивались, я на yield смотрел - там это сделать было можно, но делали напрямую через Sql, потому что были проблемы с составлением запроса через yield

Vladimir
21.09.2016
13:16:53
например?

да сам yield тут и не мешает и не помогает

Google
Anatoliy
21.09.2016
13:17:18
db.run( (for { (company, user) <- table joinLeft Users.table on (_.user_id === _.id) } yield (company, user)) ).result

вот так что ли?

так тоже не работает)

Vladimir
21.09.2016
13:17:51
а что пишет?

ну это всё возвращает Future

по нему потом надо map/flatMap делать

вот пример // GET /payments def list = ApiLogging { Action.async { ServiceLocator.db.run((for { (payment, participant) <- TableQuery[TblPayment] join TableQuery[TblParticipant] on (_.participantId === _.id) } yield (payment, participant)).result).map ( pairs => { jsonOkResult(Json.obj( "payments" -> pairs.map( pair => { val (payment, participant) = pair Json.obj( "id" -> payment.id, "participant" -> participant.name, "status" -> payment.status.v, "value" -> payment.value ) }) )) }) } }

Anatoliy
21.09.2016
13:19:19
например?
https://gist.github.com/Visteras/d04a4b12eb22923b3c7ab67191657dc6 - вот это например, но это из другого проектаи там... страшно)

Vladimir
21.09.2016
13:20:18
^ надо всё в цепочку дейсвтий вот пример // GET /payments/:id def view(id:Int) = ApiLogging { Action.async { ServiceLocator.db.run((for { payment <- TableQuery[TblPayment].filter(_.id === id).result.head participant <- TableQuery[TblParticipant].filter(_.id === payment.participantId).result.head executedBmo <- TableQuery[TblBankMoneyOrder].filter(_.id === payment.bankMoneyOrderId).result.headOption tx <- TableQuery[TblMoneyTransaction].filter(_.paymentId === id).filter(_.`type` === MoneyTransactionType.PAYMENT_LOCKED).result.head txs <- sql""" WITH cur_tx AS ( SELECT oper_time AS oper_time FROM tbl_money_transaction WHERE id = ${tx.id.get} LIMIT 1 ) , prev_tx AS ( SELECT oper_time AS oper_time FROM tbl_money_transaction WHERE oper_time < (SELECT oper_time FROM cur_tx) AND id != ${tx.id} AND type = ${MoneyTransactionType.PAYMENT_LOCKED} ORDER BY oper_time DESC LIMIT 1 ) SELECT tx.type, tx.value, o.origin_id, wh.origin_id FROM tbl_money_transaction AS tx LEFT JOIN tbl_order AS o ON o.id = tx.order_id LEFT JOIN tbl_withholding AS wh ON wh.id = tx.withholding_id WHERE tx.oper_time <= (SELECT oper_time FROM cur_tx) AND (CASE WHEN (SELECT oper_time FROM prev_tx) IS NULL THEN TRUE ELSE tx.oper_time > (SELECT oper_time FROM prev_tx) END) AND tx.participant_id = ${tx.participantId} AND tx.type IN (${MoneyTransactionType.ORDER}, ${MoneyTransactionType.WITHHOLDING}) """.as[(String,BigDecimal,String,String)] } yield (payment, participant, executedBmo, txs)).transactionally).map ( row => { // Обработка

аа у вас там просто SQL динамически генерится

Anatoliy
21.09.2016
13:21:04
Не нравится мне как он там генерится

Vladimir
21.09.2016
13:21:33
ну вы бы могли TableQuery[] обработать

в зависимости от условий

Google
Vladimir
21.09.2016
13:21:42
и его в slick уже отдать

а потом в тот сложный SQL отдать список IDS из первого допустим

Anatoliy
21.09.2016
13:22:44
надо будет попробовать, но есть ощущение что там будет выглядет ьвсе еще хуже

Vladimir
21.09.2016
13:22:58
не правда )

хотя

а че за база такая вообще? )

так же нельзя группировать

Anatoliy
21.09.2016
13:24:10
Просто чистый Sql хоть он и не очень там удобен - видно прекрасно, а так - далеко не факт что будет понятно что там за такое

Vladimir
21.09.2016
13:24:29
у в вас в группировке 3 колонки, а в запросе их куча

Anatoliy
21.09.2016
13:24:31
https://poeinfo.ru - вот эта там база. Она уже не работает, русскоязычная версия игры закрылась(

Vladimir
21.09.2016
13:24:32
и это не агрегатки

я про движоу

Anatoliy
21.09.2016
13:24:43
Точнее ушло все на евро сервера

Vladimir
21.09.2016
13:24:45
Mysql?

Anatoliy
21.09.2016
13:24:49
mariadb

Vladimir
21.09.2016
13:25:09
ну почто тоже самое

ну ладно это уже тема SQL )

Anatoliy
21.09.2016
13:25:54
а по поводу группировки - да, там были с этим косяки, но в ечм проблема сгруппировать по 3 колонкам а вывести больше?

Vladimir
21.09.2016
13:26:04
ну это не однозначная выбора

выборка*

Google
Alexander
21.09.2016
13:26:07
нормальный SQL такого не позволяет )

Vladimir
21.09.2016
13:26:09
да

&

Anatoliy
21.09.2016
13:26:14
там группировка была нужна что бы сгруппировать всю доступную игроку валюту что бы вывести ее общее количество

Vladimir
21.09.2016
13:26:16
в MYSQL есть флаг для этого

Alexander
21.09.2016
13:26:19
а mysql просто рандомные значения для отсальных колонок веррнет

Anatoliy
21.09.2016
13:26:32
были там рандомные значения одно время, победил их все же)

правда рандом был не для остальных колонок а длу сгруппированных

Vladimir
21.09.2016
13:26:53
http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by

вот этот флаг

не гуд в общем его отключать)

Anatoliy
21.09.2016
13:27:31
так вроде и не отключал?

Vladimir
21.09.2016
13:27:41
ну по дефолту отключен значит

Anatoliy
21.09.2016
13:28:01
не знаю) там докер контейнер со стандартными значениями)

я туда особо не смотрел)

Vladimir
21.09.2016
13:28:06
> а mysql просто рандомные значения для отсальных колонок веррнет вот в этом проблема

Alexander
21.09.2016
13:28:11
с 5.7 вроде по дефолту включен

Vladimir
21.09.2016
13:28:19
^ это хорошо

Vladimir
21.09.2016
13:28:25
ну да

Google
Vladimir
21.09.2016
13:28:30
явными агрегатками

Alexander
21.09.2016
13:28:33
смотря что тебе хочется получить :)

Vladimir
21.09.2016
13:28:36
а не на усмотрения БД

Anatoliy
21.09.2016
13:28:55
ну то что мне хотелось получить - я получил) хоть и с извратами) ну как по мне с извратами

Vladimir
21.09.2016
13:29:23
ну советую таки углубиться) понять почему это не комильфо)

Anatoliy
21.09.2016
13:29:46
вообще - стоит, тем более как раз пока время есть на работе свободное

Alexander
21.09.2016
13:30:36
я так понимаю, что mysql до сих пор не саппортит window functions?(

Vladimir
21.09.2016
13:30:40
нет

Alexander
21.09.2016
13:30:45
с ними такие вопросы легко решаются

Admin
ERROR: S client not available

Vladimir
21.09.2016
13:30:48
да

печаль)

там только выход подзапросы

Alexander
21.09.2016
13:31:34
а в mariadb кстати некоторые функции запилили https://www.fromdual.com/mariadb-10-2-window-function-examples

Vladimir
21.09.2016
13:32:00
да это уже сильно

нам даже свои агрегатки приходилось писать )

про проблему group by колонок

tbl_user: id | status | gender 1 | active | male 2 | active | female 3 | active | male 4 | banned | male 5 | banned | female и запрос в MySQL SELECT status, gender, COUNT(*) FROM tbl_user GROUP BY status Выведет полную чепуху

надо либо все пихать в group by, либо убирать из SELECT gender

James Tiberius Kirk ?
21.09.2016
13:37:19
Кто-нибудь на курсере Одерского смотрел?

Google
James Tiberius Kirk ?
21.09.2016
13:37:26
Сложно там?

Alexander
21.09.2016
13:37:43
обсуждалось уже :)

Daniel
21.09.2016
14:17:47
Кто-нибудь на курсере Одерского смотрел?
просто, но могут добавить сложностей стереотипы мышления

Andrew
21.09.2016
14:19:01
во время прохождения или после?

Daniel
21.09.2016
14:19:50
во время

guga
21.09.2016
14:21:08
И ещё сбивает его постоянное сравнивание с java \ c#

Ivan
21.09.2016
14:22:04
Вначале сложновато потом норм если с непривычки

guga
21.09.2016
14:22:43
в генериках точно было

в коллекциях

Nikolay
21.09.2016
14:23:07
это какой именно курс?

guga
21.09.2016
14:23:27
первый в специализации.

Юрий
21.09.2016
15:15:59
а чем сбивает сравнение?

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

Daniel
21.09.2016
15:31:27
собственные, многим довольно трудно писать на первых порах в функциональном подходе

D
21.09.2016
15:33:04
А, это. Я уже точно не помню, очень давно было дело, но вроде бы мне функциональщина сразу зашла.

Кстати в этом и печаль, я так и не смог найти нормального курса по Скале для «неджавистов».

Страница 111 из 1499