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 = 101 
WHERE 
  cscart_products_categories.product_id IN (
    40917, 45575, 37326, 37414, 38766, 29813, 
    43815, 48043, 35644, 37418, 37332, 
    37335, 46584, 38121, 35656, 47565, 
    48817, 38120, 38127, 48064, 37324, 
    40370, 47621, 46239, 46730, 44491, 
    46265, 40361, 47650, 36232, 47089, 
    31738
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.02032

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 (40917,45575,37326,37414,38766,29813,43815,48043,35644,37418,37332,37335,46584,38121,35656,47565,48817,38120,38127,48064,37324,40370,47621,46239,46730,44491,46265,40361,47650,36232,47089,31738)"
        }
      },
      {
        "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
29813 166,340M
31738 166M
35644 166M
35656 166M
36232 315,166M
37324 166M
37326 166M
37332 166M
37335 166M
37414 166M
37418 166M
38120 166,340M
38121 166,340M
38127 166,340M
38766 166M
40361 165M
40370 165M
40917 340M
43815 340M
44491 169M
45575 169M
46239 105,195,101,166M 0
46265 195,101,105,166M 0
46584 210,412,169M
46730 340,171M
47089 166,191M
47565 169,412M
47621 169,412M
47650 101,110,183M 0
48043 213,210,412,169M
48064 213,166,169M
48817 166,212,195M