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
Artyom
27.10.2018
22:42:20
Andrey
27.10.2018
22:42:50
возможно во внешнем запросе нужно будет повторить andWhere()
Artyom
27.10.2018
22:44:33
оо у меня сейчас вообще дичь будет, еще субквери совать нужно, не знаю чем думал, спать хотел) Как всегда короче)
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
Andrey
27.10.2018
22:51:16
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
нее
Artyom
27.10.2018
23:02:06
Katulos
27.10.2018
23:03:16
Andrey
27.10.2018
23:03:17
если мы закончим all() то получим 2 запроса без сабквери
Artyom
27.10.2018
23:03:34
не уверен что disctinct хорошая идея, хотя это проще...
Andrey
27.10.2018
23:04:17
Google
Artyom
27.10.2018
23:04:19
что-то не, не то.
one от all отличается только тем, что последний берет из выборки тупо первую запись.
Andrey
27.10.2018
23:04:54
Artyom
27.10.2018
23:04:56
Я так думал.
Andrey
27.10.2018
23:05:10
а если их не писать, то будет один с сабквери
Katulos
27.10.2018
23:06:09
Andrey
27.10.2018
23:06:40
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
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 красивше смотрится
Asm
27.10.2018
23:29:13
Artyom
27.10.2018
23:29:28
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
ну могу в консоль попробовать, но лениво, я вообще поговорить люблю, а надо как-то исправить доделать еще и обертку для разделения на процессы сделать.
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
ну вообще, да.