@yii2ru

Страница 1720 из 1721
Aleksey
27.10.2018
21:17:25
для TIMESTAMP тоже

Сергей
27.10.2018
21:22:34
Не приходилось с этим сталкиваться

Katulos
27.10.2018
21:32:42
В Yii есть что нибудь родное, чтобы сделать пару сотен update where одним моментом без циклов?

where в пачке запросов естественно разное

Google
Andrey
27.10.2018
22:38:50
Transaction::find() ->innerJoinWith('settledTransactions') ->andWhere(['>=', 'settled_transactions.settled_at', new Expression("UNIX_TIMESTAMP('{$form->sDate}')")]) ->andWhere(['<', 'settled_transactions.settled_at', new Expression("(UNIX_TIMESTAMP('{$form->eDate}') + 3600*24)")])
Transaction::find() ->innerJoinWith([ 'settledTransactions settledTransactions' => function ($query) { $query->andOnCondition(['>=', 'settled_transactions.settled_at', new Expression("UNIX_TIMESTAMP('{$form->sDate}')")]) ->andOnCondition(['<', 'settled_transactions.settled_at', new Expression("(UNIX_TIMESTAMP('{$form->eDate}') + 3600*24)")]); } ])

Andrey
27.10.2018
22:42:50
возможно во внешнем запросе нужно будет повторить andWhere()

Artyom
27.10.2018
22:44:33
оо у меня сейчас вообще дичь будет, еще субквери совать нужно, не знаю чем думал, спать хотел) Как всегда короче)

возможно во внешнем запросе нужно будет повторить andWhere()
Не, нужно субквери делать, оно вроде групирует как, но уверенности нет в этом, да и не правильно это и все равно делает еще запрос, я ожидал что таким образом получу все за раз.

Andrey
27.10.2018
22:46:24
связь в любом случае вторым запросом получается

Artyom
27.10.2018
22:46:43
Где-то кто-то рассказывал про какой-то dataloader который решает такие проблемы, все никак не посмотрю что это такое...

Andrey
27.10.2018
22:46:48
только так получится сразу для всех моделей

Artyom
27.10.2018
22:47:46
связь в любом случае вторым запросом получается
ну вот, это было и неожиданно, какой смысл тогда в модели в этих joinWith =\

Andrey
27.10.2018
22:51:16
ну вот, это было и неожиданно, какой смысл тогда в модели в этих joinWith =\
https://elisdn.ru/blog/89/related-models-on-yii2 - если есть такие вопросы то смотри

Google
Artyom
27.10.2018
22:52:51
вот хочу все этого товарища посмотреть, но времени не нахожу. =(

Andrey
27.10.2018
22:53:36
выдели время - оно того стоит

Yet Another Stats
27.10.2018
22:54:12
Карма @andku83 стала 11

Andrey
27.10.2018
22:54:13
возможно даже не раз прийдется посмотреть, но один обязательно нужно

Artyom
27.10.2018
22:57:01
кстати то был не сабквери...
я не про это, в место where получить ids по условию where, а потом where transaction_id => (subquery->createCommand->rawSql). Или как-то так, надо как-то сесть поправить, а у меня мега косяк получается, но что-то лениво пока...

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

короче, мозг уже давно в отпуске, загорает где-то на солнышке.

Andrey
27.10.2018
22:59:38
andWhere(['transaction_id' => SettledTransactions::find()->distinct()->andWhere()])

это пример subquery без createCommand

смысл в том что мы не выполняем запрос при помощи ->all() или ->one()

Artyom
27.10.2018
23:01:12
что-то, как-то, когда-то мне поругалось на disctinct и я про него напрочь забыл. Почему-то думал что mysql считает его depricated.

Andrey
27.10.2018
23:01:39
нее

Katulos
27.10.2018
23:03:16
Model::updateAll()
Спасибо, но это не то

Andrey
27.10.2018
23:03:17
если мы закончим all() то получим 2 запроса без сабквери

Artyom
27.10.2018
23:03:34
не уверен что disctinct хорошая идея, хотя это проще...

Andrey
27.10.2018
23:04:17
Спасибо, но это не то
а у mysql есть что-то такое? или я тогда вообще не понимаю о чем вопрос

Google
Artyom
27.10.2018
23:04:19
что-то не, не то.

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

Andrey
27.10.2018
23:04:54
не уверен что disctinct хорошая идея, хотя это проще...
когда он нужен - это отличная идея

Artyom
27.10.2018
23:04:56
Я так думал.

Katulos
27.10.2018
23:06:09
а у mysql есть что-то такое? или я тогда вообще не понимаю о чем вопрос
Задача например апдейтнуть пачку записей разом, у которых условие where будет разное. допустим разные id

Katulos
27.10.2018
23:07:15
на чистом mysql покажи пример
UPDATE a SET fruit = (CASE id WHEN 1 THEN 'apple' WHEN 2 THEN 'orange' WHEN 3 THEN 'peach' END) WHERE id IN(1,2 ,3);

ну или INSERT into `table` (id, fruit) VALUES (1, 'apple'), (2, 'orange'), (3, 'peach') ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);

Хотелось бы закостылить это без магии DAO

Ибо хз какое там в итоге субд будет

Andrey
27.10.2018
23:09:16
через createComand пряио в sql и писать

Katulos
27.10.2018
23:09:31
Andrey
27.10.2018
23:09:53
из коробки вроде upsert должны были сделать

Katulos
27.10.2018
23:11:09
это опять таки оно, DAO

Artyom
27.10.2018
23:22:04
когда он нужен - это отличная идея
Попробовал и так и так, либо чего-то не того делаю, либо в моем случае на disctinct все вешается, а субквери работает оч быстро.

Andrey
27.10.2018
23:22:31
покажи

Artyom
27.10.2018
23:23:10
покажу, если чего пажет)

Google
Artyom
27.10.2018
23:25:46
не показывает, запускаю для теста в котроллере, долго-долго думает потом 502. SELECT DISTINCT transactions.* FROM transactions LEFT JOIN settled_transactions ON transactions.transaction_id = settled_transactions.tracking_id WHERE (settled_transactions.settled_at >= UNIX_TIMESTAMP('2018-10-01')) AND (settled_transactions.settled_at < (UNIX_TIMESTAMP('2018-10-27') + 3600*24))

результат не вывожу.

Andrey
27.10.2018
23:26:43
а где тут сабквери?!

Artyom
27.10.2018
23:26:47
SELECT transaction_id FROM transactions WHERE transaction_id=(SELECT transaction_id FROM transactions LEFT JOIN settled_transactions ON transactions.transaction_id='settled_transactions.tracking_id' WHERE (settled_transactions.settled_at >= UNIX_TIMESTAMP('2018-10-01')) AND (settled_transactions.settled_at < (UNIX_TIMESTAMP('2018-10-27') + 3600*24)) GROUP BY transaction_id)

0.3 мс.

короче, буду считать и дальше disctinct какой-то непонятной depricated)

Andrey
27.10.2018
23:28:52
beetwen красивше смотрится

результат не вывожу.
это на каком языке?

Andrey
27.10.2018
23:30:39
в смысле?
куда не выводишь?

Artyom
27.10.2018
23:30:50
просто выполняю запрос.

Andrey
27.10.2018
23:30:54
так это 2 совсем разных запроса

Asm
27.10.2018
23:30:58
так и во втором тоже много данных.
нет, там стоит группировка

Andrey
27.10.2018
23:31:36
в первом ты всю строку запрашиваешь, а во втором только id

Artyom
27.10.2018
23:31:44
ну могу в консоль попробовать, но лениво, я вообще поговорить люблю, а надо как-то исправить доделать еще и обертку для разделения на процессы сделать.

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

Andrey
27.10.2018
23:32:35
ты напиши свою структуру и что нужно получить, а то "лечим" по описанию внешности

Artyom
27.10.2018
23:33:11
хотя в первом, понятно, там еще и joinWith сейчас перепроверю.

Google
Artyom
27.10.2018
23:33:45
ты напиши свою структуру и что нужно получить, а то "лечим" по описанию внешности
я уже все придумал) просто накосячил с получением моделей)

Andrey
27.10.2018
23:33:46
при че тут joinWith ты показываешь чистый скл

Artyom
27.10.2018
23:34:46
при том, что в результат еще собирается то что with, я об этом не подумал как-то.

поэтому 502

Andrey
27.10.2018
23:35:16
false вторым параметром

Artyom
27.10.2018
23:35:31
0.8 ms

все равно субквери быстрее был.

?

Andrey
27.10.2018
23:36:19
на малых данных вобще нельзя такое тестить, не показательно

Artyom
27.10.2018
23:36:30
соррян, туплю уже, надо спать как-то)

Andrey
27.10.2018
23:36:48
тем белее что сравниваешь ежа и носорога

да и кстати DISTINCT - частный случай GROUP BY

Artyom
27.10.2018
23:39:52
это понятно, вот я и использу group by , как говорил уже, distinct где-то когда-то люто ругнулось и где-то было написано что depricated.

)))

Andrey
27.10.2018
23:40:47
ну-ну..

Artyom
27.10.2018
23:40:54
Но, спасибо, может и сделаю на disctinct. Данные надо загрузить, пока только за этот месяц, а так таблицу почистил, чтобы было видно что тестить, тестов то нет =( еще их починить =(

Andrey
27.10.2018
23:41:50
ты понимаешь что ``SELECT transactions.*`` уже не равно ``SELECT transaction_id`` ???

Artyom
27.10.2018
23:42:15
ну вообще, да.

Страница 1720 из 1721