Как получить продукты из заказа, записи заказа и статус заказов из запроса

#mysql #hybris #flexible-search

#mysql #sap-commerce-cloud #гибкий поиск

Вопрос:

Я подготовил гибкий поисковый запрос. Здесь я разработал условие, подобное:

  1. Статус заказа завершен в заказах

  2. И записи заказа, которые присутствуют в заказе

  3. Получение продуктов, которые находятся в orderentries

Для этого я написал запрос

 select {p.pk} from {
  order as o 
  join OrderStatus as os on {os.pk}={o.status}
  join orderentry as oe on{oe.order}={o.pk}
  join product as p on {oe.product}={p.pk}
}
where {os.code}='COMPLETED' 
AND {o.date}>'2020-08-16 00:00:00.000' AND{o.date}<'2020-09-30 00:00:00.000' 
group by{p.pk} order by count({oe.pk}) desc limit 10
  

здесь, в этом запросе, я хочу получить всю информацию о продукте, например

 select * from Product}
  

Как изменить этот запрос, чтобы получить все продукты?

Ответ №1:

Вы можете сделать это с помощью подвыбора. Первым запросом, который вы опубликовали выше, будет подвыборка. Вам просто нужно добавить еще один выбор, чтобы получить информацию о продукте для всех PK, возвращенных в подвыборке.

 select * from {Product as prod} where {prod.pk} in 
({{ 
  select 
    top 10 {p.pk} 
  from 
    {
      Order as o join 
      OrderStatus as os on {os.pk} = {o.status} join 
      OrderEntry as oe on {oe.order} = {o.pk} join 
      Product as p on {oe.product} = {p.pk}
    }
  where 
    {os.code} = 'COMPLETED' and 
    {o.date} > '2020-08-16 00:00:00.000' and 
    {o.date} < '2020-09-30 00:00:00.000'
  group by {p.pk} 
  order by count({oe.pk}) desc
}})
  

Комментарии:

1. это было здорово, спасибо. но я также добавляю ограничение, которое я беру из другой таблицы, могу ли я включить его, как это звучит. выберите {numberOfProducts} из {topsellingproductcomponent}. он возвращает число (например, 10). так что я могу ограничить значения, которые приходят

2. Смотрите Мой отредактированный запрос выше. Просто потребовалась небольшая модификация. Должно получиться

3. Кроме того, я не думаю, что есть какой-либо способ сделать то, что вы просите, со значением {topsellingproductcomponent} в операторе select . Сценарий groovy, вероятно, был бы лучшим способом достижения этой цели.