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.00183

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