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 (
    565, 564, 567, 566, 592, 593, 831, 830, 
    829, 828, 827, 835, 834, 846, 845, 844, 
    843, 842, 851, 850, 849, 848, 847, 858, 
    857, 856, 855, 854, 863, 862, 861, 860, 
    859
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00091

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "108.66"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "4.53"
      },
      "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": 4,
            "filtered": "7.54",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (565,564,567,566,592,593,831,830,829,828,827,835,834,846,845,844,843,842,851,850,849,848,847,858,857,856,855,854,863,862,861,860,859))",
            "cost_info": {
              "read_cost": "61.65",
              "eval_cost": "0.91",
              "prefix_cost": "104.14",
              "data_read_per_join": "72"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
564 300M,389
565 300M,389
566 389,300M
567 300M,389
592 301M,366,374
593 301M,366,374
827 301,367M,302
828 301,367M,302
829 302,301,367M
830 367M,302,301
831 301,367M,302
834 373M,301,372
835 372,373M,301
842 302,301,368M
843 302,301,368M
844 368M,302,301
845 301,368M,302
846 302,301,368M
847 302,301,368M
848 302,301,368M
849 302,301,368M
850 302,301,368M
851 301,368M,302
854 302,301,369M
855 302,301,369M
856 302,301,369M
857 302,301,369M
858 302,301,369M
859 369M,302,301
860 302,301,369M
861 302,301,369M
862 302,301,369M
863 302,301,369M