Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 23.08.2014 08:49:46

Bender

Сложный запрос

В общем есть следующий sql запрос:
SELECT id, count(id )
FROM (SELECT DISTINCT * FROM tablica
WHERE text
IN ("text1", "text2" тут массив из элементов)) as t1
GROUP id
Как из него сделать работоспособный запрос? Пробовал через DB::select, но он работает не корректно

#2 23.08.2014 09:37:56

Bender

Re: Сложный запрос

Если кому-то понадобится вот решение, правда еще не разобрался где накосячил т.к. врет немного.
DB::table(DB::raw('('.DB::table('tablica')->distinct()->whereIn('text', $array)->toSql().') as t1'))->select(DB::Raw('id, count(id )'))->groupBy('id')->get();

#3 23.08.2014 10:55:06

Re: Сложный запрос

Довольно странный запрос, мне кажется у тебя ошибка в логике. Если id — это как обычно уникальное числовое поле, то нет смысла делать COUNT или GROUP BY id — id ведь и так одни на таблицу, поэтому COUNT будет 1, а GROUP BY просто ничего не изменит (т.к. поле для группировки — уникальное).

В чём назначение запроса? Посчитать число текстов, которые совпадают с массивом? Зачем тогда подзапрос?

sqlSELECT id или COUNT(1) FROM tablica
WHERE text IN (...)

Не в сети

#4 23.08.2014 14:04:43

Bender

Re: Сложный запрос

Proger_XP пишет:

}%Довольно странный запрос, мне кажется у тебя ошибка в логике. Если id - это как обычно уникальное числовое поле, то нет смысла делать COUNT или GROUP BY id - id ведь и так одни на таблицу, поэтому COUNT будет 1, а GROUP BY просто ничего не изменит (т.к. поле для группировки - уникальное).

В чём назначение запроса? Посчитать число текстов, которые совпадают с массивом? Зачем тогда подзапрос?
%%(sql)
SELECT id или COUNT(1) FROM tablica
WHERE text IN (...)
%%

Пробела в том, что и id и text не уникальные поля, там и повторы периодически проскальзывают.
Вкратце нужно найти все id'ы у которых text'ы с массивом совпадают. Подзапрос здесь нужен т.к. почему-то DISTINCT и order by одновременно не работают, т.е. показывает не совсем ожидаемые результат если в таблице имеются повторы (оно не часто, но где-то 2-3 на тысячу строк проскальзывает).
Как вариант конечно просто чистить от повторов и не использовать подзапрос, но боюсь это слишком геморойно для таблицы с десятками миллионов записей, в которой даже индексов нету т.к. они занимают раза в 1.5 больше места, чем сама таблица.

#5 23.08.2014 14:08:43

Bender

Re: Сложный запрос

Bender пишет:

DISTINCT и order by

Опечатался тут, а исправить не могу, к сожалению, disctinct и group by

#6 23.08.2014 16:16:12

Bender

Re: Сложный запрос

Нафлудил от души чот, в общем решил забить на все эти составные запросы и просто добавить уникальный индекс к таблице, благо таблица растет не так быстро как ожидалось.

Подвал раздела