у меня есть 30 постов, мне нужно вернуть 10 штук, но указать что всего их 30.
Сначала я делал это просто двумя запросами, один с каунт, другой с лимит 10.
Хочу найти другой вариант.
Сейчас дошёл до этого, но на вид страшно. Вдруг есть более хорошее?
WITH fp AS (
SELECT *
FROM posts),
fpcount AS (
SELECT COUNT(*)
FROM fp)
SELECT *
FROM fp,
fpcount
LIMIT 10
А чем плох вариант с 2-мя запросами?
тем что 2 запроса...? Меня устраивают два, просто мне почему-то кажется, это базовая вещь какая-то с уже готовым решением где-то
"тем что 2 запроса...?" - в двух горутинах можно взять по коннекту из пула и выполнить эти запросы параллельно, если в этом проблема
Да понятно что можно) Но вот видите за 1 запрос по сути можно тоже получить, хочу узнать насколько нормально так делать. Я пока у себя в любом случае оставлю 2, но для общего опыта хочу иметь как минимум 2-3 решения одной и той же задачи, чтобы выбирать нужную в зависимости о требований
Все остальные способы сложно реализуются, когда куча опциональных условий, т.к. запрос получается хитрым, и всякими квери-билдерами его запарно строить. А строку руками по кускам собирать тоже не сильно приятно. Это я про ваш вариант с WITH
зачем так сложно, я вам выше писал, сделайте count через окна, тогда к таблице придется обращаться только один раз.
видимо, я не понял как) пойду почитаю про окна
там ничего не надо count(..) over(...) и все даже условий партиций не надо мудрить, т.к. нужно просто посчитать кол-во общее
SELECT *, count(*) OVER () FROM posts LIMIT 10 Типа этого..?)
не совсем, limit должен быть в верхнем запросе, а count в подзапросе
select * from (select *,count()... from ...) as t limit 10
но так нельзя т.к требует группировку
нет если дописать over, это не аггрегатный count а оконный
Так.. и чем это отличается тогда от моего варианта выше? (ваш первый мой второй) select * from (select *,count(*) OVER () from posts) p limit 10; select *,count(*) OVER () from posts limit 10; Результат один... upd у нижнего варианта cost чуть ниже)
да в этом случае никакой, я уже сплю, вы разговариваете с автоответчиком.
Понял, большое вам спасибо, я прямо сейчас читаю как раз, на этом примере чуть понятнее стало)
но это лучше вашего первоначального варианта.
Безусловно :D
Вселенная удивительная штука, сидел над тем же сейчас бился. И зашёл в чат, спросить то же что и ты Щяс почитаем чем тебе тут помогли
Почитайте) я в итоге сейчас оставлю все равно два запроса т.к текущее решение заставляет изменить сигнатуры структур в которые парсятся данные) и либо указывать явно куда парсить, либо оставить автоматически как сейчас, но с новой структурой) Поэтому решил оставить 2 запроса просто)) Но решение работает, это факт и я хоть знать буду теперь какая есть альтернатива и мб использую её как-нибудь
Добавить 1 поле - это сложно?
Я не хочу в объект "пост" добавлять count т.к это поле относится к выборке постов а не одному) Но в каких-то случаях можно было бы и так
У вас там id поста всегда есть?
11 записей, count в id 11й строки.
Не понял вас)
Обсуждают сегодня