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 = 309 
WHERE 
  cscart_products_categories.product_id IN (
    976, 978, 968, 971, 636, 969, 972, 977, 
    1022, 1023, 1106, 1110, 1131, 1142, 
    1157, 1159, 1013, 1105, 1108, 1152, 
    1153, 1154, 1120, 1101, 1104, 1111, 
    1134, 1140, 1141, 979, 989, 632, 613, 
    617, 621, 622, 1015, 1016, 1018, 1019, 
    611, 612, 980, 1007, 1002, 638, 997, 
    990
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00164

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "119.16"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "5.22"
      },
      "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": 5,
            "filtered": "8.62",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (976,978,968,971,636,969,972,977,1022,1023,1106,1110,1131,1142,1157,1159,1013,1105,1108,1152,1153,1154,1120,1101,1104,1111,1134,1140,1141,979,989,632,613,617,621,622,1015,1016,1018,1019,611,612,980,1007,1002,638,997,990))",
            "cost_info": {
              "read_cost": "64.86",
              "eval_cost": "1.04",
              "prefix_cost": "107.69",
              "data_read_per_join": "83"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        },
        {
          "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",
              "cscart.cscart_products_categories.product_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 5,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "5.22",
              "eval_cost": "1.04",
              "prefix_cost": "113.95",
              "data_read_per_join": "83"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
611 310M
612 364,309M,363 0
613 355,311,309M 0
617 355,311,309M 0
621 355,311M
622 309M,355,311 0
632 309M,359,345 0
636 310,350,309M 0
638 363,309M,365 0
968 310,348M,309 0
969 310,309,349M 0
971 349M,310,309 0
972 309,350M,310 0
976 309,350M,310 0
977 310,309,350M 0
978 310,309,351M 0
979 309,352M,311 0
980 363,364M,309 0
989 309,363,364M 0
990 309,363,364M 0
997 309,363,365M 0
1002 365M,309,363 0
1007 363,365M,309 0
1013 356M,309,345 0
1015 345,357M,309 0
1016 309,345,357M 0
1018 358M,309,345 0
1019 358M,309,345 0
1022 347M,309,362 0
1023 347,361M,309 0
1101 345M
1104 345M
1105 345M
1106 363M
1108 345M
1110 363M
1111 345M
1120 345M
1131 363M
1134 345M
1140 345M
1141 345M
1142 363M
1152 345M
1153 345M
1154 345M
1157 363M
1159 363M