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, 632, 633, 1013, 1014, 1016, 
    1017, 1108, 1152, 1162, 1163, 613, 614, 
    615, 616, 617, 618, 619, 620, 622, 636, 
    637, 638, 639, 972, 973, 974, 975, 980, 
    981, 982, 983, 984, 990, 991, 997, 998, 
    999, 1000, 1001, 1002, 1003, 1004, 1005, 
    1006, 1007, 1008, 1009, 1010, 1011, 
    1030, 621, 1029, 1157, 1164
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00155

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "114.64"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "6.95"
      },
      "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": 6,
            "filtered": "11.50",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (969,970,632,633,1013,1014,1016,1017,1108,1152,1162,1163,613,614,615,616,617,618,619,620,622,636,637,638,639,972,973,974,975,980,981,982,983,984,990,991,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1030,621,1029,1157,1164))",
            "cost_info": {
              "read_cost": "64.86",
              "eval_cost": "1.39",
              "prefix_cost": "107.69",
              "data_read_per_join": "111"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
613 355,311,309M
614 355,311,309M
615 309M,355,311
616 311,309M,355
617 355,311,309M
618 355,311,309M
619 355,311,309M
620 355,311,309M
621 355,311M
622 309M,355,311
632 309M,345,359
633 359,309M,345
636 310,350,309M
637 310,350,309M
638 363,365,309M
639 309M,363,365
969 309,310,349M
970 349M,309,310
972 309,350M,310
973 310,309,350M
974 350M,310,309
975 350M,310,309
980 309,364M,363
981 309,364M,363
982 309,364M,363
983 309,364M,363
984 363,309,364M
990 364M,363,309
991 309,364M,363
997 309,363,365M
998 309,363,365M
999 309,363,365M
1000 363,365M,309
1001 363,365M,309
1002 363,365M,309
1003 309,363,365M
1004 309,363,365M
1005 309,363,365M
1006 363,365M,309
1007 363,365M,309
1008 363,365M,309
1009 309,363,365M
1010 309,363,365M
1011 309,363,365M
1013 356M,309,345
1014 356M,309,345
1016 357M,309,345
1017 309,345,357M
1029 311M,355
1030 355,309M,311
1108 345M
1152 345M
1157 363M
1162 345M
1163 345M
1164 363M