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 (
    87247, 87248, 88509, 88513, 88950, 88951, 
    88952, 90321, 90322, 92450, 92451, 
    92452, 92453, 92454, 92455, 92456, 
    91838, 86859, 88142, 88145, 88520, 
    91885, 87878, 91837, 91886, 91887, 
    92329, 92330, 92331, 92332
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00145

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "53.07"
    },
    "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": 93,
            "rows_produced_per_join": 93,
            "filtered": "100.00",
            "using_index": true,
            "cost_info": {
              "read_cost": "9.59",
              "eval_cost": "9.30",
              "prefix_cost": "18.89",
              "data_read_per_join": "1K"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ],
            "attached_condition": "(`nuie_scalesta_net`.`cscart_products_categories`.`product_id` in (87247,87248,88509,88513,88950,88951,88952,90321,90322,92450,92451,92452,92453,92454,92455,92456,91838,86859,88142,88145,88520,91885,87878,91837,91886,91887,92329,92330,92331,92332))"
          }
        },
        {
          "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": 4,
            "filtered": "5.00",
            "cost_info": {
              "read_cost": "23.25",
              "eval_cost": "0.47",
              "prefix_cost": "51.44",
              "data_read_per_join": "12K"
            },
            "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": 4,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "1.16",
              "eval_cost": "0.47",
              "prefix_cost": "53.07",
              "data_read_per_join": "74"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
86859 7148,7207M 0
87247 7194M
87248 7194M
87878 7241,7309,7346,7208M
88142 7241,7309,7346,7208M
88145 7241,7309,7346,7208M
88509 7241,7309,7346,7208M
88513 7241,7309,7346,7208M
88520 7148,7207,7208M 0
88950 7241,7309,7346,7208M
88951 7241,7309,7346,7208M
88952 7241,7309,7346,7208M
90321 7265,7247M
90322 7265,7247M
91837 7341,7342,7343,7157M
91838 7341,7342,7343,7157M
91885 7226,7225M
91886 7226,7225M
91887 7226,7225M
92329 7226,7225M
92330 7226,7225M
92331 7226,7225M
92332 7226,7225M
92450 7341,7342,7343,7157M
92451 7341,7342,7343,7157M
92452 7341,7342,7343,7157M
92453 7341,7342,7343,7157M
92454 7341,7342,7343,7157M
92455 7341,7342,7343,7157M
92456 7341,7342,7343,7157M