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 = 438 
WHERE 
  cscart_products_categories.product_id IN (
    31629, 41397, 1972, 31630, 3764, 36746, 
    2085, 3749, 225, 775, 4239, 4493, 3745, 
    2304, 2082, 3750, 26404, 5829, 5611, 
    15218, 41399, 223, 3004, 3765, 2302, 
    5813, 28440, 22143, 46715, 18160, 3754, 
    3747
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00759

JSON explain

{
  "query_block": {
    "select_id": 1,
    "nested_loop": [
      {
        "table": {
          "table_name": "cscart_products_categories",
          "access_type": "range",
          "possible_keys": ["PRIMARY", "pt"],
          "key": "pt",
          "key_length": "3",
          "used_key_parts": ["product_id"],
          "rows": 60,
          "filtered": 100,
          "index_condition": "cscart_products_categories.product_id in (31629,41397,1972,31630,3764,36746,2085,3749,225,775,4239,4493,3745,2304,2082,3750,26404,5829,5611,15218,41399,223,3004,3765,2302,5813,28440,22143,46715,18160,3754,3747)"
        }
      },
      {
        "table": {
          "table_name": "cscart_categories",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY", "c_status", "p_category_id"],
          "key": "PRIMARY",
          "key_length": "3",
          "used_key_parts": ["category_id"],
          "ref": ["dev_db.cscart_products_categories.category_id"],
          "rows": 1,
          "filtered": 100,
          "attached_condition": "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')"
        }
      },
      {
        "table": {
          "table_name": "product_position_source",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY", "pt"],
          "key": "PRIMARY",
          "key_length": "6",
          "used_key_parts": ["category_id", "product_id"],
          "ref": ["const", "dev_db.cscart_products_categories.product_id"],
          "rows": 1,
          "filtered": 100
        }
      }
    ]
  }
}

Result

product_id category_ids position
223 157M
225 105,107,110,166M
775 107,110,105M
1972 210,213,412,169M
2082 211,215M
2085 110,107,105,191M
2302 169M
2304 210,412,169M
3004 166M
3745 211,215M
3747 215M
3749 211,215M
3750 211,215M
3754 211,215M
3764 211,215M
3765 211,215M
4239 199M
4493 199M
5611 199M
5813 114M
5829 169,412,210M
15218 169,412M
18160 211,215M
22143 213,210,169M
26404 197M
28440 169M
31629 122M
31630 123M
36746 409,340M
41397 144M
41399 144M
46715 412,169M