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, 636, 637, 972, 973, 974, 975, 
    699, 700, 701, 702, 774, 775, 776, 777, 
    778, 779, 780, 781, 782, 783, 784, 785, 
    786, 787, 788, 789, 790, 791, 792, 793, 
    794, 795, 1025, 1026, 1027
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00149

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "109.35"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "5.26"
      },
      "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": 5,
            "filtered": "8.77",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (969,970,636,637,972,973,974,975,699,700,701,702,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,1025,1026,1027))",
            "cost_info": {
              "read_cost": "61.60",
              "eval_cost": "1.05",
              "prefix_cost": "104.09",
              "data_read_per_join": "84"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
636 350,309M,310
637 350,309M,310
699 405M,404,298
700 298,405M,404
701 404,298,405M
702 404,298,405M
774 404,298,405M
775 404,298,405M
776 405M,404,298
777 298,405M,404
778 298,405M,404
779 404,298,405M
780 404,298,405M
781 404,298,405M
782 405M,404,298
783 405M,404,298
784 298,405M,404
785 299,391M,298
786 299,391M,298
787 299,391M,298
788 299,391M,298
789 299,391M,298
790 298,299,391M
791 391M,298,299
792 299,391M,298
793 299,391M,298
794 299,391M,298
795 299,391M,298
969 310,349M,309
970 310,349M,309
972 309,350M,310
973 309,350M,310
974 309,350M,310
975 309,350M,310
1025 400,401M,399
1026 400,401M,399
1027 401M,399,400