
aster
11.01.2018
06:00:26
И там как бы формы внутри
Система такая - и код и данные всё в одном файле

Al
11.01.2018
06:04:50

Google

Al
11.01.2018
06:07:16
Мы не ищем лёгких путей.
Мы создаем себе трудности
Что бы потом мужественно их преодолевать.
Ну что бы было чем гордиться. ?

aster
11.01.2018
06:18:18
?
Я просто даже не искал сейчас, потому что когда этот вопрос вставал при внедрении - вендор ответил что нет такой возможности.
Тогда была версия 11.
Посмотрю есть ли это в текущей доступной мне версии.
Спасибо

Al
11.01.2018
06:29:01
Пойду спать. Злые вы все

ко?TEXHIK
11.01.2018
06:35:10

aster
11.01.2018
06:35:43
превратили в какой-то 1с, ей богу

ко?TEXHIK
11.01.2018
06:36:42
Да просто уже третий человек с третьей системой с такой архитектурой

aster
11.01.2018
06:40:53
я про вот это: что данные и код внутри.
на самом деле так делать нельзя.
все скрипты загрузки и формулы должны быть снаружи qvw файла (во внешних qvw)
в самом приложении - только формы.

Vladislav
11.01.2018
07:26:10

Konstantine
11.01.2018
09:39:12
Всем привет!

Google

Konstantine
11.01.2018
09:39:34
подскажите пожалуйста решение проблемы
пишу запрос на dql нужно получить количество платящих игроков, но вот почему то DISTINCT в COUNT() не срабатывает
$qb
->select ('DATE(p.transactionTime) AS d, COUNT(DISTINCT p.player) AS countPlayers, g.countryCode, g.countryName, '
. 'p.productCode, COUNT(p.productCode) AS amount, p.market, (player.id) as player_id ')
->from ('IronTanksCoreBundle:PlayerPayment', 'p')
->innerJoin ('p.player', 'player')
->innerJoin ('player.geoip', 'g')
->where ('p.isTest = false')
->andWhere ('player.createTime BETWEEN :startDate AND :endDate')
->andWhere ('p.market IN (:markets)')
->setParameter (':startDate', $startDate)
->setParameter (':endDate', $endDate)
->setParameter (':markets', $markets);
есть тут спецы?
аууу

Vladislav
11.01.2018
09:44:40
что за dql?
что за база?

Konstantine
11.01.2018
09:47:51
mariadb
dql - загугли
sql вообще знаешь?


Ilia
11.01.2018
09:50:46
$qb
->select ('DATE(p.transactionTime) AS d, COUNT(DISTINCT p.player) AS countPlayers, g.countryCode, g.countryName, '
. 'p.productCode, COUNT(p.productCode) AS amount, p.market, (player.id) as player_id ')
->from ('IronTanksCoreBundle:PlayerPayment', 'p')
->innerJoin ('p.player', 'player')
->innerJoin ('player.geoip', 'g')
->where ('p.isTest = false')
->andWhere ('player.createTime BETWEEN :startDate AND :endDate')
->andWhere ('p.market IN (:markets)')
->setParameter (':startDate', $startDate)
->setParameter (':endDate', $endDate)
->setParameter (':markets', $markets);
Шли чистый SQL, а не код, который его производит...
$qb
->select ('DATE(p.transactionTime) AS d, COUNT(DISTINCT p.player) AS countPlayers, g.countryCode, g.countryName, '
. 'p.productCode, COUNT(p.productCode) AS amount, p.market, (player.id) as player_id ')
->from ('IronTanksCoreBundle:PlayerPayment', 'p')
->innerJoin ('p.player', 'player')
->innerJoin ('player.geoip', 'g')
->where ('p.isTest = false')
->andWhere ('player.createTime BETWEEN :startDate AND :endDate')
->andWhere ('p.market IN (:markets)')
->setParameter (':startDate', $startDate)
->setParameter (':endDate', $endDate)
->setParameter (':markets', $markets);
Гы, и ГДЕ ЖЕ У ТЕБЯ ТАМ GROUP BY ?
А?


Vladislav
11.01.2018
09:54:03


Konstantine
11.01.2018
09:55:43
вот groupBy
$qb = $this->em->createQueryBuilder ();
if (in_array (Application::MARKET_WINSTORE, $markets)) {
$markets[] = Application::PLATFORM_WINRT;
$markets[] = Application::PLATFORM_WSA;
$markets[] = Application::PLATFORM_UWP;
}
if (in_array (Application::MARKET_APPSTORE, $markets)) {
$markets[] = Application::PLATFORM_IOS;
$markets[] = Application::PLATFORM_MACOS;
}
$qb
->select ('DATE(p.transactionTime) AS d, COUNT(DISTINCT p.player) AS countPlayers, g.countryCode, g.countryName, '
. 'p.productCode, COUNT(p.productCode) AS amount, p.market, (player.id) as player_id ')
->from ('IronTanksCoreBundle:PlayerPayment', 'p')
->innerJoin ('p.player', 'player')
->innerJoin ('player.geoip', 'g')
->where ('p.isTest = false')
->andWhere ('player.createTime BETWEEN :startDate AND :endDate')
->andWhere ('p.market IN (:markets)')
->setParameter (':startDate', $startDate)
->setParameter (':endDate', $endDate)
->setParameter (':markets', $markets);
if (!empty ($countries)) {
$qb
->andWhere ('g.countryCode IN (:countries)')
->setParameter('countries', $countries);
}
$qb
->groupBy ('d, p.market, g.countryCode');
$result = $qb->getQuery ()->getResult ();
и где я нагрубил?)


Андрэ
11.01.2018
09:56:11
Не похоже на SQL запрос по прежнему)

Konstantine
11.01.2018
09:56:36
не, на SQL я писать не буду, все норм работает, лучше все по красоте сделать

Андрэ
11.01.2018
09:56:41
и где я нагрубил?)
Вошел в чатик, спросил помощи в ответ на уточнения "sql вообще знаешь?" Со стороны как-то не оч

Google

Vladislav
11.01.2018
09:56:45
это какой-то dql, гугл даже в шоке от этой разновидности синтаксиса

Андрэ
11.01.2018
09:57:05
Зачем писать на SQL? QueryBuilder сможет же показать во что это превращается?

Vladislav
11.01.2018
09:57:45
и на сколько я понимаю, это вообще ORM

Konstantin
11.01.2018
09:58:00
@shtikov у меня твой сайт карёжится :(

Yury
11.01.2018
09:59:27
Зачем вообще что-либо писать, есть же квери дизайнеры

Konstantin
11.01.2018
10:00:14
Блин, сайт пытается отмасштабироваться под экран, но скролл на всю длину остаётся.

Konstantine
11.01.2018
10:00:45

Андрэ
11.01.2018
10:02:10
Ну ты ж не ожидаешь, что кто-то тут будет в уме твой код в SQL приводить, чтобы понять, что у тебя не так?

Konstantine
11.01.2018
10:03:53
да, я особо на него времени не тратил, честно говоря даже цели какой то небыло его делать, прост очтоб был)

Konstantine
11.01.2018
10:11:42
нашел запрос, который получается в итоге
SELECT DATE(p.transactionTime) AS d, COUNT(DISTINCT p.player) AS countPlayers, g.countryCode, g.countryName, p.productCode, COUNT(p.productCode) AS amount, p.market, (player.id) as player_id FROM IronTanksCoreBundle:PlayerPayment p INNER JOIN p.player player INNER JOIN player.geoip g WHERE p.isTest = false AND (player.createTime BETWEEN :startDate AND :endDate) AND p.market IN (:markets) GROUP BY d, p.market, g.countryCode

Asai
11.01.2018
10:23:03
всем привет, может быть, кто то сталкивался с такой проблемой в workbench
при нажатии на test connection возникает следующая ошибка
Failed to Connect to MySQL at localhost:3306 with user root

Vladislav
11.01.2018
10:33:50

Konstantine
11.01.2018
10:37:08
групп бай не весь прописан
я так понимаю, что бы player.id не повторялся в самом начале GroupBy надо еще и player.id прописать..да?
все же почему то не сработало

Google

Konstantine
11.01.2018
10:38:25
в базе в стране Jersey всего игроков 4 и из них 1 только платил, вот мне бы его найти
все же группировка по player.id не сработала для этой страны...в остальных сработала

Stanislav
11.01.2018
10:40:05
вот groupBy
Это на PHP что ли? Вы сначала запрос на чистом SQL и проверьте....

Konstantine
11.01.2018
10:40:41

Vladislav
11.01.2018
10:41:12

Admin
ERROR: S client not available

Konstantine
11.01.2018
10:42:53
лол, вообще все поля?
все 8?

Vladislav
11.01.2018
10:43:21
sql вообще знаешь?

Stanislav
11.01.2018
10:43:25
Выложите результирующий набор
там будет видно что не так.

Serge
11.01.2018
10:46:25
лол, вообще все поля?
все 8?
ну да.
Насколько я помню, select() и groupBy() могут принимать параметром массив вместо строки с полями через запятую. Поэтому частично этот массив можно переиспользовать.

Konstantine
11.01.2018
10:47:33

Serge
11.01.2018
10:49:09
лол, вообще все поля?
все 8?
Но совет от коллег действительно правильный: возьмите результирующий запрос, который строит query builder, и заставьте его работать. А уже потом внесите изменения обратно в построение запроса из приложения.

Stanislav
11.01.2018
10:49:23
+

Konstantine
11.01.2018
10:49:44
:)

Vladislav
11.01.2018
13:04:09
https://habrahabr.ru/company/tinkoff/blog/346446/

Ilia
11.01.2018
13:10:28
SELECT DATE(p.transactionTime) AS d, COUNT(DISTINCT p.player) AS countPlayers, g.countryCode, g.countryName, p.productCode, COUNT(p.productCode) AS amount, p.market, (player.id) as player_id FROM IronTanksCoreBundle:PlayerPayment p INNER JOIN p.player player INNER JOIN player.geoip g WHERE p.isTest = false AND (player.createTime BETWEEN :startDate AND :endDate) AND p.market IN (:markets) GROUP BY d, p.market, g.countryCode
ВСЕ поля, которых нет под COUNT(), SUM(), AVG() надо указать в GROUP BY.
И лучше в виде выражений, а не имён полей в списке вывода.

Google

Alexey
11.01.2018
13:49:15

Ilia
11.01.2018
13:56:13

Alexey
11.01.2018
13:57:19
НАДО или НЕ НАДО можно сказать только посмотрев на схему таблиц. а их нет

Vladislav
11.01.2018
13:58:34
причем тут схемы о_0
все что выводите и не агрегаты должно быть в группбае

Alexey
11.01.2018
13:59:21
можно вот тут начать читать: https://blog.jooq.org/2015/12/10/sql-group-by-and-functional-dependencies-a-very-useful-feature/
продолжить вот тут: http://mysqlserverteam.com/mysql-5-7-only_full_group_by-improved-recognizing-functional-dependencies-enabled-by-default/
хотя я вот от ораклоидов часто слышу байку про "НАДО ВСЕГДА УКАЗЫВАТЬ". я так понимаю, Oracle функциональные зависимости вообще не понимает?
но это неверно, начиная с SQL:99

Serge
11.01.2018
14:05:14
хм, любопытно, спасибо

Ilia
11.01.2018
14:08:03

Serge
11.01.2018
14:08:20
одиннадцатый оракл действительно не понимает, что согласуется и с моим опытом, и с доками:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_10002.htm#SQLRF55281

Alexey
11.01.2018
14:08:38

Ilia
11.01.2018
14:08:43

Serge
11.01.2018
14:08:43
пофиг на опыт, конечно, но в доке написано предельно ясно ;)