У меня есть веб-приложение, в котором URL-адрес продукта выглядит следующим образом: https://www.example.com/fruits/golden-apple
, и когда пользователь заходит по этой ссылке, я получаю подробную информацию об этом продукте, но я также хотел бы убедиться, что фактический Продукт относится к той же категории, что и в URL (fruits
), в противном случае я отправлю ответ о статусе 404.
В настоящее время я запрашиваю сведения о продукте следующим образом:
const prodPath = ${JSON.stringify(req.query.prodPath)}; // golden-apple
const catPath = ${JSON.stringify(req.query.catPath)}; // fruits
let sql = SELECT p.*,
CONCAT('[', IF(c.id IS NULL, '', GROUP_CONCAT( DISTINCT(JSON_OBJECT(
'id', c.id,
'name', c.name,
'urlPath', c.urlPath,
'parentId', c.parentId,
)))), ']') AS categories,
FROM products AS p
LEFT JOIN _categories_products AS cp ON cp.productId = p.id
LEFT JOIN categories AS c ON c.id = cp.categoryId
WHERE p.urlPath = ${prodPath};
ответ:
{
"id": 1
"name": "Golden Apple"
"urlPath": "golden-apple"
"categories": [{
"id": 1,
"name": "Foods",
"urlPath": "foods",
"parentId": null
},{
"id": 2,
"name": "Fruits",
"urlPath": "fruits",
"parentId": 1
}]
}
В таблице _categories_products
есть следующие поля: id, productId, categoryId
.
Мой вопрос заключается в том, как я могу расширить запрос сверху, чтобы проверить, является ли фактический продукт находится в запрошенной категории?
Я пытался добавить AND c.urlPath = ${catPath}
к предложению WHERE, но это ограничивало массив категорий только фруктами.
Заранее спасибо!