SELECT 
  cscart_products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      cscart_products_categories.link_type = "M", 
      CONCAT(
        cscart_products_categories.category_id, 
        "M"
      ), 
      cscart_products_categories.category_id
    )
  ) AS category_ids 
FROM 
  cscart_products_categories 
  INNER JOIN cscart_categories ON cscart_categories.category_id = cscart_products_categories.category_id 
  AND cscart_categories.storefront_id IN (0, 1) 
  AND (
    cscart_categories.usergroup_ids = '' 
    OR FIND_IN_SET(
      0, cscart_categories.usergroup_ids
    ) 
    OR FIND_IN_SET(
      1, cscart_categories.usergroup_ids
    )
  ) 
  AND cscart_categories.status IN ('A', 'H') 
WHERE 
  cscart_products_categories.product_id IN (
    801, 800, 799, 798, 797, 806, 805, 804, 
    803, 802, 810, 809, 808, 807, 812, 811, 
    814, 813, 818, 817, 816, 815, 823, 822, 
    826, 825, 1095, 1127
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00102

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "111.16"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "3.48"
      },
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "ALL",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "rows_examined_per_scan": 126,
            "rows_produced_per_join": 5,
            "filtered": "4.00",
            "cost_info": {
              "read_cost": "29.72",
              "eval_cost": "1.01",
              "prefix_cost": "30.73",
              "data_read_per_join": "20K"
            },
            "used_columns": [
              "category_id",
              "storefront_id",
              "usergroup_ids",
              "status"
            ],
            "attached_condition": "((`cscart`.`cscart_categories`.`storefront_id` in (0,1)) and ((`cscart`.`cscart_categories`.`usergroup_ids` = '') or find_in_set(0,`cscart`.`cscart_categories`.`usergroup_ids`) or find_in_set(1,`cscart`.`cscart_categories`.`usergroup_ids`)) and (`cscart`.`cscart_categories`.`status` in ('A','H')))"
          }
        },
        {
          "table": {
            "table_name": "cscart_products_categories",
            "access_type": "ref",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "cscart.cscart_categories.category_id"
            ],
            "rows_examined_per_scan": 12,
            "rows_produced_per_join": 3,
            "filtered": "5.75",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (801,800,799,798,797,806,805,804,803,802,810,809,808,807,812,811,814,813,818,817,816,815,823,822,826,825,1095,1127))",
            "cost_info": {
              "read_cost": "64.86",
              "eval_cost": "0.70",
              "prefix_cost": "107.69",
              "data_read_per_join": "55"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
797 393,396M,392
798 392,393,396M
799 396M,392,393
800 393,396M,392
801 393,396M,392
802 393,396M,392
803 393,396M,392
804 393,396M,392
805 392,393,396M
806 393,396M,392
807 393,396M,392
808 393,396M,392
809 393,396M,392
810 393,396M,392
811 392,394,397M
812 397M,392,394
813 397M,392,394
814 397M,392,394
815 416M,392,394
816 416M,392,394
817 392,394,416M
818 392,394,416M
822 392,395,398M
823 392,395,398M
825 398M
826 398M
1095 393M
1127 393M