У меня есть небольшой вопрос.
Я хотел бы выбрать N строк из 5 id.
Я уже пробовал этот запрос:
SELECT a.fk_produit_id, a.id, a.titre, a.prix, a.description, a.short_description, a.image_url
from produits p, articles a
WHERE p.id = a.fk_produit_id AND p.fk_category_id IN (2, 248, 335, 493, 1038)
GROUP BY p.fk_category_id;
Или этот:
SELECT a.fk_produit_id, a.id, a.titre, a.prix
from articles a
inner join produits p
WHERE p.id = a.fk_produit_id AND p.fk_category_id IN (2, 248, 335, 493, 1038)
order by a.fk_produit_id limit 5
Я хотел бы, чтобы результат был таким:
id: 1 : -> record 1
-> record 1
-> record 1
-> record 1
-> record 1
id: 2 : -> record 2
-> record 2
-> record 2
-> record 2
-> record 2
id: 3 : -> record 3
-> record 3
-> record 3
-> record 3
-> record 3
id: 4 : -> record 4
-> record 4
-> record 4
-> record 4
-> record 4
id: 5 : -> record 5
-> record 5
-> record 5
-> record 5
-> record 5
Но они не работали, как я хочу. Если кто-то может мне помочь или объяснить, как я могу это решить. Заранее спасибо, ребята, я продолжаю свои исследования рядом со мной.
Вы хотите 5 статей на продукт или 5 продуктов на статью?
Я хотел бы 5 статей по категориям продуктов.
Этого можно добиться, используя ROW_NUMBER()
SELECT a.fk_produit_id,
a.id,
a.titre,
a.prix,
a.description,
a.short_description,
a.image_url
FROM ( SELECT a.fk_produit_id,
a.id,
a.titre,
a.prix,
a.description,
a.short_description,
a.image_url,
ROW_NUMBER() OVER(PARTITION BY p.fk_category_id
ORDER BY a.fk_produit_id) AS RowNumber
FROM produits AS p
INNER JOIN articles AS a
ON p.id = a.fk_produit_id
WHERE p.fk_category_id IN (2, 248, 335, 493, 1038)
) AS a
WHERE a.RowNumber <= 5; -- Change 5 to whatever "n" is
Возможно, вам придется изменить свой заказ по мере необходимости, но это должно помочь вам начать
Это не совсем так, как я хочу. Обычно я хотел бы отображать 25 записей (5 записей x 5 id). Но этот запрос выбирает 9000+ записей.
Без каких-либо надлежащих демонстрационных данных трудно понять, почему это не работает должным образом. Я собрал упрощенный пример, который возвращает только 25 строк, возможно, вы пропустили финальное предложение where? или у вас есть другие условия (например, операционная), где это может повлиять на результаты?
Я редактирую и добавляю несколько примеров таблицы. Скажи мне, если тебе нужно что-то еще. Спасибо вам за вашу помощь!
Можете ли вы опубликовать некоторые образцы данных, которые имеют отношение к вашей проблеме, пожалуйста? С вашими примерными данными первоначальный запрос, который вы разместили (исключая лимит и группировку), возвращает только 5 результатов, поэтому трудно использовать эти данные для визуализации проблемы, с которой вы столкнулись. dbfiddle.uk/JcC5JNgm
Я добавляю некоторые изображения моей базы данных. Первая — это таблица «статьи», а вторая — таблица «продукты». Скажи мне, если тебе нужно что-то еще
В идеале нам нужен Минимальный воспроизводимый пример вашей проблемы, который можно использовать для тестирования и демонстрации любых потенциальных решений.
Хорошо, я использовал ваш код и изменил его, и я нашел решение своей проблемы. Спасибо большое, наконец-то я могу двигаться дальше. :)
Вы можете использовать боковую производную таблицу, чтобы вернуть 5 статей для каждого продукта:
SELECT p.*, a.fk_produit_id, a.id, a.titre, a.prix
from produits p
cross join
lateral (select * from articles
WHERE p.id = fk_produit_id
order by fk_produit_id
limit 5) a
where p.fk_category_id IN (2, 248, 335, 493, 1038)
Пожалуйста, предоставьте тестовые данные структуры таблиц и желаемый результат минимальный воспроизводимый пример