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, 
  product_position_source.position AS position 
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') 
  LEFT JOIN cscart_products_categories AS product_position_source ON cscart_products_categories.product_id = product_position_source.product_id 
  AND product_position_source.category_id = 7148 
WHERE 
  cscart_products_categories.product_id IN (
    97220, 97221, 97222, 97223, 97224, 97225, 
    97226, 97227, 97567, 97570, 97573, 
    97574, 97575, 97576, 97577, 97578, 
    97579, 97580, 97581, 97582, 97583, 
    97584, 97585, 97586, 97682, 97683, 
    97684, 97685, 97686, 97687
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00131

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "67.27"
    },
    "grouping_operation": {
      "using_filesort": false,
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_products_categories",
            "access_type": "range",
            "possible_keys": [
              "PRIMARY",
              "link_type",
              "pt"
            ],
            "key": "pt",
            "used_key_parts": [
              "product_id"
            ],
            "key_length": "3",
            "rows_examined_per_scan": 118,
            "rows_produced_per_join": 118,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "12.10",
              "eval_cost": "11.80",
              "prefix_cost": "23.90",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`nuie_scalesta_net`.`cscart_products_categories`.`product_id` in (97220,97221,97222,97223,97224,97225,97226,97227,97567,97570,97573,97574,97575,97576,97577,97578,97579,97580,97581,97582,97583,97584,97585,97586,97682,97683,97684,97685,97686,97687))"
          }
        },
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "nuie_scalesta_net.cscart_products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 5,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "29.50",
              "eval_cost": "0.59",
              "prefix_cost": "65.20",
              "data_read_per_join": "15K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status",
              "storefront_id"
            ],
            "attached_condition": "((`nuie_scalesta_net`.`cscart_categories`.`storefront_id` in (0,1)) and ((`nuie_scalesta_net`.`cscart_categories`.`usergroup_ids` = '') or (0 <> find_in_set(0,`nuie_scalesta_net`.`cscart_categories`.`usergroup_ids`)) or (0 <> find_in_set(1,`nuie_scalesta_net`.`cscart_categories`.`usergroup_ids`))) and (`nuie_scalesta_net`.`cscart_categories`.`status` in ('A','H')))"
          }
        },
        {
          "table": {
            "table_name": "product_position_source",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id",
              "product_id"
            ],
            "key_length": "6",
            "ref": [
              "const",
              "nuie_scalesta_net.cscart_products_categories.product_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 5,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "1.48",
              "eval_cost": "0.59",
              "prefix_cost": "67.27",
              "data_read_per_join": "94"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
97220 7341,7342,7343,7157M
97221 7341,7342,7343,7157M
97222 7341,7342,7343,7157M
97223 7341,7342,7343,7157M
97224 7341,7342,7343,7157M
97225 7341,7342,7343,7157M
97226 7341,7342,7343,7157M
97227 7341,7342,7343,7157M
97567 7341,7342,7343,7157M
97570 7341,7342,7343,7157M
97573 7341,7342,7343,7157M
97574 7241,7309,7346,7208M
97575 7241,7309,7346,7208M
97576 7341,7342,7343,7157M
97577 7341,7342,7343,7157M
97578 7341,7342,7343,7157M
97579 7341,7342,7343,7157M
97580 7341,7342,7343,7157M
97581 7265,7247M
97582 7341,7342,7343,7157M
97583 7341,7342,7343,7157M
97584 7341,7342,7343,7157M
97585 7341,7342,7343,7157M
97586 7341,7342,7343,7157M
97682 7241,7309,7346,7208M
97683 7241,7309,7346,7208M
97684 7241,7309,7346,7208M
97685 7241,7309,7346,7208M
97686 7241,7309,7346,7208M
97687 7241,7309,7346,7208M