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

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "108.62"
    },
    "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.55",
            "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.60",
              "eval_cost": "0.91",
              "prefix_cost": "104.09",
              "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 300M,389
567 389,300M
592 301M,366,374
593 301M,366,374
827 301,367M,302
828 301,367M,302
829 301,367M,302
830 302,301,367M
831 367M,302,301
834 301,372,373M
835 373M,301,372
842 302,301,368M
843 302,301,368M
844 302,301,368M
845 368M,302,301
846 301,368M,302
847 302,301,368M
848 302,301,368M
849 302,301,368M
850 302,301,368M
851 302,301,368M
854 369M,302,301
855 302,301,369M
856 302,301,369M
857 302,301,369M
858 302,301,369M
859 302,301,369M
860 369M,302,301
861 301,369M,302
862 302,301,369M
863 302,301,369M