@symfony_php

Страница 869 из 1418
Shmaltorhbooks
18.04.2018
12:13:44
ну, иными словами, цель я понял. я смысла не понял)

Herman
18.04.2018
12:15:09
Мне нужно перечислить все пары с их ид. Потом результаты занесутся в таблицу dublicates
Проще будет пройтись по всем записям в таблице и пытаться найти совпадения - 1 запрос за раз

По-моему без full outer join тут не обойтись, хотя я могу ошибаться.

Timur
18.04.2018
12:17:04
найти юзеров, которые в автобусе будут отзываться на одно и то же имя?
Найти юзеров, который по какому-то долбоебическому стечению обстоятельств, ввели свое имя неверно (и таких много). Специфика проекта такова, что пользователи регистрируются без введения email и пароля. Точнее email вводится, но он не уникален. Другими словами, они могут регистрироваться сколь угодно много раз

Google
Timur
18.04.2018
12:18:18
лучше ngram, а не soundex
Не знаю что это такое, но обязательно посмотрю

Artem
18.04.2018
12:18:40
самый нормальный способ искать с опечатками

3граммы самое оно

Timur
18.04.2018
12:19:46
Artem
18.04.2018
12:20:32
я делал его и в бд и в языке и в postgresql есть экстеншн

elasticsearch/sphinx умеют

в твоем случае еще надо outliers отсечь

т.е. сортировать и взять диапазон, а не все сравнивать со всеми

Timur
18.04.2018
12:48:19
Короче, вот результат, если кому интересно: SELECT c.id, c.firstname, c.lastname, d.id, d.firstname, d.lastname FROM consumer c JOIN consumer d ON ( (c.firstname = d.firstname AND c.lastname = d.lastname) OR # Equal (soundex(c.firstname) = soundex(d.firstname) AND soundex(c.lastname) = soundex(d.lastname)) # Soundex (c.firstname LIKE CONCAT('%', d.firstname, '%') AND c.lastname LIKE CONCAT('%', d.firstname, '%')) OR (d.firstname LIKE CONCAT('%', c.firstname, '%') AND d.lastname LIKE CONCAT('%', c.firstname, '%')) ) AND (c.id < d.id) Всего 6200 строк. Запрос выполняется в течение 15 секунд

Herman
18.04.2018
12:51:19
6200 это количество строк в таблице users ?

Timur
18.04.2018
12:52:03
6200 это количество строк в таблице users ?
да, таблица называется consumer на самом деле

Herman
18.04.2018
12:54:49
да, не тем местом читаю sql. После добавления нового пользователя в базу будешь заново гонять запрос?

Google
Timur
18.04.2018
12:55:32
да, не тем местом читаю sql. После добавления нового пользователя в базу будешь заново гонять запрос?
Нет конечно, он же всех со всеми сравнивает. После добавления только его буду сравнивать

Роман
18.04.2018
14:23:06
Всем доброго времени суток) Кто использовал генерацию миграций и Postgis в symfony? Есть проблема связана с генерацией миграции которая пытается дропнуть таблицы postgis'a. Или может есть что-то вроде конфига schema_filter который бы заставил всю эту историю смотреть только в схему public?

Роман
18.04.2018
14:43:56
Так в чем проблема
Команда генерации миграции создает запросы на дроп таблиц и прочего связанного с postgis, а этого не нужно

Andrey
18.04.2018
14:52:13
Роман
18.04.2018
14:56:07


Igor
18.04.2018
14:57:09
Ну вообще в доктрине scheme_filter есть

Andrey
18.04.2018
14:57:40
Ну вообще в доктрине scheme_filter есть
он только к таблицам относится

Igor
18.04.2018
14:57:52
Andrey
18.04.2018
15:35:58
все. туплю оО
оказалось, что относится к таблицам, но в регулярку будет прокидыватся схема тоже в случае не-public схемы. Поэтому регуляркой можно обойтись

Alex
18.04.2018
17:12:35
Ребят, а у меня вопрос по доктрине. Есть у меня сущность А, у неё куча связей и через 7 или 8 сушностей у неё есть связь, скажем, с сущностью Z. И мне нужно посчитать сколько Z привязано к сущности А. Если идти по всем связям - запросов будет куча. Правильно ли я понимаю, что я могу создать простой класс B, который не привязан к таблице в базе и с помощью result set mapping и sql запроса, который считает количество этих Z, спроецировать результат запроса на инстанс этого класса?

Timur
18.04.2018
17:15:19
На сущность или на инстанс произвольного класса?
Насколько я знаю ты мапишь на сущность, и даже на ее связи

Timur
18.04.2018
17:16:21
ой да там не сложно)
Объясни тогда человеку, че сидишь?)

Alex
18.04.2018
17:16:25
То есть мне надо добавлять какое-то виртуальное поле в сущность?

Которое обычно будет null

Google
Sergey
18.04.2018
17:16:36
не обязательно, ты всегда можешь сделать что-то типа

Alex
18.04.2018
17:16:57
Но при запросе через result set mapping - оно будет заполняться?

Sergey
18.04.2018
17:17:16
SELECT COUNT(entity.id) FROM Foo\Foo entity INNER JOIN Foo\Bar bar WITH bar.id=entity.someId

единственное ограничение в DQL в плане джойнов - можешь только с сущностями работать и джойнить только сущности

Alex
18.04.2018
17:18:30
У меня основной вопрос не в написании запроса, а в том, могу ли я мапить это дело на простой объект? Который не менеджится доктриной

Sergey
18.04.2018
17:18:38
да, можешь

Alex
18.04.2018
17:18:45
О, супер)

Спасибо)

Sergey
18.04.2018
17:18:51
можешь даже так: SELECT new SomeDTO(COUNT(entity.id))

ну то есть либо так либо руками массивчик на объект

увы result set mapping тоже только сущности пока умеет

Timur
18.04.2018
17:19:28
единственное ограничение в DQL в плане джойнов - можешь только с сущностями работать и джойнить только сущности
А еще в результирующем массиве могут быть сущности разных типов, так что если через foreach перебираешь их, можно обломаться

Sergey
18.04.2018
17:19:32
но! всегда можно написать свой гидратор!)))

вариантов решений проблемы масса.... самый сложный - кастомная гидрация специализированная под конкретный кейс

Alex
18.04.2018
17:20:09
но! всегда можно написать свой гидратор!)))
Всегда можно написать и свою доктрину)

Sergey
18.04.2018
17:20:20
Всегда можно написать и свою доктрину)
это на пару порядков задачка посложнее

но да, можно)

особенно если без DQL

можно в разы проще сделать

Google
Timur
18.04.2018
17:21:08
У меня основной вопрос не в написании запроса, а в том, могу ли я мапить это дело на простой объект? Который не менеджится доктриной
Нет, не можешь, разработчики доктрины поставили специальный ограничитель, который следит за тем, чтобы ты не маппил куда попало, потому что они не любят все, что не является сущносятми

Alex
18.04.2018
17:21:28
Вот это поворот

Timur
18.04.2018
17:21:33
Alex
18.04.2018
17:24:45
Но тут таблица genre мапится на сущность Genre

Ну, или наоборот, не суть

Admin
ERROR: S client not available

Timur
18.04.2018
17:25:09
Но тут таблица genre мапится на сущность Genre
Да, я и не говорю, что мапил куда хочу. Но могу для тебя проверить

Или не надо?

Alex
18.04.2018
17:25:48
Если не сложно)

Я с телефона, в транспорте, у меня сейчас никак(

Timur
18.04.2018
17:32:58
Если не сложно)
Не, нельзя

Alex
18.04.2018
17:33:24
Грусть

Andrey
18.04.2018
17:33:46
Так пробуй

можешь даже так: SELECT new SomeDTO(COUNT(entity.id))

Timur
18.04.2018
17:39:17
Грусть
Еще раз, почему ты не хочешь делать DQL запрос?

Sergey
18.04.2018
17:40:41
Но тут таблица genre мапится на сущность Genre
ну так в чем проблема? все что ты описал спокойно делается через DQL

Alex
18.04.2018
17:40:48
DQL, который вернёт массивчик?

Google
Timur
18.04.2018
17:44:16
DQL, который вернёт массивчик?
DQL это тоже самое, что сделать SQL и замапить результат на сущность, только процесс автоматический

Очень редко, когда надо маппить результаты на сущности, только когда у тебя там какие-нибудь хитросплетения

Timur
18.04.2018
17:46:07
Их есть у меня
Может тебе это только кажется?

Ты ж даже не знаешь, что такое DQL

Или знаешь?

Alex
18.04.2018
17:47:11
Язык запросов доктрины же

Больше контекста в вопросе не помешало бы)

Timur
18.04.2018
17:50:45
Язык запросов доктрины же
Ну по сути DQL запрос конвертируется в обычный SQL запрос, а результаты этого запроса потом маппятся на сущности, то же, что хочешь сделать и ты. DQL обычно хватает для большинства нужд, но ты говоришь, что у тебя там дерзкие запросы?)

Больше контекста в вопросе не помешало бы)
Опиши свои сущности и связи между ними, можешь сделать скрины, я так больше люблю) Скинь мне, скажи, что тебе надо, я напишу DQL запрос

Можешь в личку если хочешь

Timur
18.04.2018
17:59:19
Под словом "хитросплетения" ты имел в виду сложность запросов или размазанность и запутанность бизнес-логики?
Сложность запросов. Бывает ты используешь какие-то специфические для данной БД конструкции или функции, который никак не используешь в DQL. Тогда можно сделать SQL запрос и получить данные в виде массива, либо можно сделать nativeQuery и указать правила гидрации твоих сущностей. В обоих случаях, ты привязываешь свои запросы под конкретную БД, так что в будущем, если сменишь ее, все может сломаться

Alex
18.04.2018
18:01:23
Тут дай бог с 5.5.9 на 5.7 переехать, чтоб хотя бы json уметь. Куда уж там до смены базы)

Timur
18.04.2018
18:02:04
Доктрина не работает с мускульным json'ом
Опять же, придется писать нативные запросы, привязка к мускулу

Maksim
18.04.2018
18:02:36
Или тип)

Alex
18.04.2018
18:03:08
Да и хрен с ней, с доктриной) надо было пару раз восстановить из таблицы логов в json кой-чо

Тот ещё треш с replace

Страница 869 из 1418