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 
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') 
WHERE 
  cscart_products_categories.product_id IN (
    969, 970, 1020, 1021, 632, 633, 1013, 
    1014, 1016, 1017, 613, 614, 615, 616, 
    617, 618, 619, 620, 622, 636, 637, 638, 
    639, 972, 973, 974, 975, 980, 981, 982, 
    983, 984, 985, 986, 987, 988, 990, 991, 
    992, 993, 994, 995, 996, 997, 998, 999, 
    1000, 1001, 1002, 1003, 1004, 1005, 
    1006, 1007, 1008, 1009, 1010, 1011, 
    1030, 621, 1029
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00188

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "112.56"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "8.47"
      },
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "ALL",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "rows_examined_per_scan": 125,
            "rows_produced_per_join": 5,
            "filtered": "4.00",
            "cost_info": {
              "read_cost": "29.49",
              "eval_cost": "1.00",
              "prefix_cost": "30.49",
              "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": 8,
            "filtered": "14.12",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (969,970,1020,1021,632,633,1013,1014,1016,1017,613,614,615,616,617,618,619,620,622,636,637,638,639,972,973,974,975,980,981,982,983,984,985,986,987,988,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1030,621,1029))",
            "cost_info": {
              "read_cost": "61.60",
              "eval_cost": "1.69",
              "prefix_cost": "104.09",
              "data_read_per_join": "135"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
613 311,309M,355
614 355,311,309M
615 355,311,309M
616 309M,355,311
617 309M,355,311
618 309M,355,311
619 309M,355,311
620 311,309M,355
621 355,311M
622 355,311,309M
632 359,345,309M
633 309M,359,345
636 309M,310,350
637 350,309M,310
638 309M,365,363
639 365,363,309M
969 349M,310,309
970 309,349M,310
972 309,350M,310
973 309,350M,310
974 309,350M,310
975 309,350M,310
980 364M,363,309
981 309,364M,363
982 309,364M,363
983 309,364M,363
984 309,364M,363
985 363,309,364M
986 364M,363,309
987 364M,363,309
988 309,364M,363
990 309,364M,363
991 309,364M,363
992 363,365M,309
993 363,365M,309
994 363,365M,309
995 309,363,365M
996 309,363,365M
997 309,363,365M
998 365M,309,363
999 363,365M,309
1000 363,365M,309
1001 363,365M,309
1002 309,363,365M
1003 309,363,365M
1004 365M,309,363
1005 363,365M,309
1006 363,365M,309
1007 363,365M,309
1008 309,363,365M
1009 309,363,365M
1010 309,363,365M
1011 365M,309,363
1013 309,356M,345
1014 345,309,356M
1016 309,357M,345
1017 309,357M,345
1020 309,346M,360
1021 309,346M,360
1029 355,311M
1030 355,309M,311