Как получить один продукт из базы данных MySQL по категориям продуктов и посредников - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть веб-приложение, в котором 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, но это ограничивало массив категорий только фруктами.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...