Как правильно офрмить запрос
Суть проблемы: Мне надо вначале получить определенные новости с запроса по критериям, а потом с помощью ROW_NUMBER() получить опред количество этих новостей.
Запросы которые у меня есть:
WITH news
AS (SELECT ROW_NUMBER() OVER (ORDER BY creation_date DESC)
AS row_id, news_id, author_id, tittle, news_text, creation_date FROM news)
SELECT *
FROM news
WHERE (row_id BETWEEN 1 AND 3)
и
SELECT * FROM news
WHERE to_tsvector(tittle) @@ to_tsquery('tags')
Вот что мне примерно надо, но это выдает ошибку
SELECT * FROM news AS news1
WHERE to_tsvector(title) @@ to_tsquery('ta') OR title LIKE '%ta%'
WITH news1 AS (
SELECT ROW_NUMBER() OVER (ORDER BY creation_date DESC) AS row_id,
news_id,
author_id,
title,
news_text,
creation_date
FROM news),
news2 AS (
SELECT *
FROM news1
WHERE (row_id BETWEEN 1 AND 2)
)
Ответы (1 шт):
Автор решения: Hany
→ Ссылка
Таблицы идут по порядку. Первый запрос такой
SELECT * FROM news
WHERE to_tsvector(title) @@ to_tsquery('ta') OR title LIKE '%ta%'
Он выдаёт результат. Если к результату этого запроса нужно опять обратиться, то можно представить его ввиде with
WITH temp_news AS (
SELECT * FROM news
WHERE to_tsvector(title) @@ to_tsquery('ta') OR title LIKE '%ta%'
)
Теперь к этому запросу можно обратиться как будто он таблица, только имя таблицы уже будет не news как в первом варианте, а temp_news.
Теперь можно сделать с новым запросом тоже самое.
В итоге весь код может выглядеть так:
WITH temp_news AS
(
SELECT * FROM news
WHERE to_tsvector(title) @@ to_tsquery('ta') OR title LIKE '%ta%'
),
result_news AS
(
SELECT ROW_NUMBER() OVER (ORDER BY creation_date DESC) AS row_id,
news_id,
author_id,
title,
news_text,
creation_date
FROM temp_news
)
SELECT *
FROM result_news
WHERE (row_id BETWEEN 1 AND 2)