Пожалуйста, рассмотрите следующий сценарий, чтобы понять мое требование.
У меня есть список типов продуктов
Webinar, Summit, Intent
История: Пользователь (учетная запись) может подписаться на любой (Webinar, Intent, Summit)
виды продукции. Если пользователь подписался на все вышеупомянутые product_type, то в ответе все product_type должны отображаться в следующем порядке: , но при условии, что мы показали только 6 записей .
У меня есть таблица с именем test
Table: test
+-----+--------------+-----------+------------+----------+
| id | product_type | status | account_id | event_id |
+-----+--------------+-----------+------------+----------+
| 1 | Summit | Active | 1 | 123 |
| 2 | Intent | Pending | 1 | 456 |
| 3 | Intent | Completed | 1 | 789 |
| 4 | Webinar | Completed | 1 | 321 |
| 5 | Summit | Inactive | 1 | 465 |
| 6 | Summit | Completed | 1 | 126 |
| 7 | Intent | Inactive | 1 | 965 |
| 8 | Webinar | Completed | 1 | 325 |
| 9 | Summit | Pending | 1 | 145 |
| 10 | Intent | Pending | 1 | 568 |
+-----+--------------+-----------+------------+----------+
Столбец product_type
может иметь различные значения, например
<em>"Webinar", "Intent", "Summit"</em>
Столбец status
может иметь различные значения, например
<em>"Pending", "Inactive", "Active", "Completed"</em>
Я хочу отсортировать записи сначала по столбцу status
, а затем по столбцу product_type
.
, вот порядок сортировки:
status sorting order: Pending, Inactive, Active, Completed
product_type sorting order: Webinar, Summit, Intent
//If any product_type with status Pending it should sort first then Inactive so on.
//If 2 different product_type like Intent and Summit having the same status then query should be sort by product_type
Пожалуйста, рассмотрите следующий сценарий. Предположим, что на аккаунт подписано всего 30 product_type, например
Total 10 Webinar: 5 pending and 5 Completed
Total 12 Summit: 6 Inactive and 6 Completed
Total 8 Intent: 4 Active and 4 Completed
Как я уже упоминал, запрос должен вернуть только 6 записей. Если мы рассмотрим выше порядок сортировки, тогда запрос должен показывать результат ниже результата.
4 pending Webinar
1 Inactive Summit
1 Active Intent
Сценарий: 1
Suppose in request I get account_id = 1 and productTypes = "Webinar, Intent, Summit"
Согласно test
таблица account_id = 1 подписан на все (Webinar, Intent, Summit)
product_type, поэтому в ответ мы должны показать все product_type, связанные с учетной записью с заданным порядком сортировки (сначала статус, а затем product_type). поэтому запрос должен возвращаться ниже вывода.
+----+--------------+-----------+------------+----------+
| id | product_type | status | account_id | event_id |
+----+--------------+-----------+------------+----------+
| 9 | Summit | Pending | 1 | 145 |
| 2 | Intent | Pending | 1 | 456 |
| 10 | Intent | Pending | 1 | 568 |
| 5 | Summit | Inactive | 1 | 465 |
| 7 | Intent | Inactive | 1 | 965 |
| 4 | Webinar | Completed | 1 | 321 |
+----+--------------+-----------+------------+----------+
Сценарий: 2 Suppose in request I get account_id = 1 and productTypes = "Webinar, Intent"
Кстати, account_id = 1 подписан на все (Webinar, Intent, Summit)
product_type, но в запросе мы получаем только productTypes = Webinar, Intent
, поэтому запрос должен быть отсортирован по (сначала статус, затем product_type) для Webinar, Intent
Ожидаемый результат:
+----+--------------+-----------+------------+----------+
| id | product_type | status | account_id | event_id |
+----+--------------+-----------+------------+----------+
| 2 | Intent | Pending | 1 | 456 |
| 10 | Intent | Pending | 1 | 568 |
| 7 | Intent | Inactive | 1 | 965 |
| 4 | Webinar | Completed | 1 | 321 |
| 8 | Webinar | Completed | 1 | 325 |
| 3 | Intent | Completed | 1 | 789 |
+----+--------------+-----------+------------+----------+
Вот мой пример запроса,
Здесь Я рассматриваю в запросе, я получу account_id = 1
и productTypes = Webinar, Intent, Summit
Таким образом, желаемым результатом будет сценарий: 1
SELECT
*
FROM
test
WHERE
account_id = 1 AND
product_type IN ('Webinar' , 'Summit', 'Intent')
//product_type is coming in request so I will update dynamically
AND status IN ('Pending' , 'Inactive', 'Active', 'Completed')
ORDER BY
FIELD(status,
'Pending',
'Inactive',
'Active',
'Completed') ,
FIELD(product_type,
'Webinar',
'Summit',
'Intent')
limit 6;// as we have to show only 6 records
Я рассматриваю, что не могу достичь ожидаемого выхода с один запрос, может кто-нибудь помочь мне исправить этот запрос. Спасибо.