Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавить нормальную реализацию join для КХ для QueryBuilder #21

Open
sanchezzzhak opened this issue Oct 24, 2017 · 4 comments
Labels

Comments

@sanchezzzhak
Copy link
Owner

sanchezzzhak commented Oct 24, 2017

К текущему join сделать ExeptionNotSupport так как структура запроса не работоспособная, ждем улучшения со стороны яндекса может они допилят работу join до стандарта

новый join будет работать согласно спецификации (по другому не умеет)

SELECT
   CounterID,
   hits,
   visits
FROM
(
   SELECT
       CounterID,
       count() AS hits
   FROM test.hits
   GROUP BY CounterID
) ANY LEFT JOIN
(
   SELECT
       CounterID,
       sum(Sign) AS visits
   FROM test.visits
   GROUP BY CounterID
) USING CounterID
ORDER BY hits DESC
LIMIT 10

Создадим 2 метода
using($columns) где $columns - это строка или массив колонк
queryJoin($type, $query) где $type [GLOBAL] ANY|ALL INNER|LEFT [OUTER]

@navel
Copy link

navel commented Nov 8, 2017

А не вариант изменить текущий join под данный запрос?
В QueryBuilder весь текущий запрос поместить в секцию 'FROM'. Функцию buildJoin научить принимать не [[table, type, condition], [...], ...], а [Query, type, usingCondition].
И еще понадобится изменить саму функцию join, добавив входной параметр select, ибо кликхаус сам не умеет получать ВСЕ сгенерированные столбцы подзапросов и их придется указывать вручную.

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

@sanchezzzhak
Copy link
Owner Author

для php5.6 можно в рамках наследования от какого-то класса добавить или сделать меньше параметров на метод можно, а вот для тех, кто использует php7+ это будет ошибка.

несколько решений есть - это или полностью уходить от наследования от базового yii\db\QueryBuilder на собственную реализацию

делать сколько-же параметров что и в наследнике (ваш вариант)
или сделать отдельные методы.

@navel
Copy link

navel commented Nov 8, 2017

У самого php7.0.22, сделал отдельной функцией.
Думаю можно и переопределить готовую оставив столько-же параметров, а от идеи с select в параметрах можно отказаться оставив возможность самому вручную уже после join прописывать select.

@sanchezzzhak
Copy link
Owner Author

select хочется автоматизировать, брать все включая using, а если задан select то использовать только его)

у меня ошибку выдает =)

Declaration of kak\clickhouse\Query::join($type, $query, $using, $params = Array) should be compatible with yii\db\Query::join($type, $table, $on = '', $params = Array)

а так хочется параметры переименовать)

@sanchezzzhak sanchezzzhak added pause and removed task labels Feb 25, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants