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

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 389,300M
566 300M,389
567 300M,389
592 301M,366,374
593 301M,366,374
827 301,367M,302
828 302,301,367M
829 367M,302,301
830 301,367M,302
831 301,367M,302
834 373M,301,372
835 372,373M,301
842 302,301,368M
843 368M,302,301
844 301,368M,302
845 302,301,368M
846 302,301,368M
847 302,301,368M
848 302,301,368M
849 302,301,368M
850 368M,302,301
851 302,301,368M
854 302,301,369M
855 302,301,369M
856 302,301,369M
857 302,301,369M
858 369M,302,301
859 301,369M,302
860 302,301,369M
861 302,301,369M
862 302,301,369M
863 302,301,369M