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

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