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 (
    592, 593, 831, 830, 829, 828, 827, 835, 
    834, 841, 840, 839, 838, 837, 846, 845, 
    844, 843, 842, 851, 850, 849, 848, 847, 
    858, 857, 856, 855, 854, 863, 862, 861, 
    860, 859, 872, 871, 870, 869, 868
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00119

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "109.64"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "5.55"
      },
      "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": "9.25",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (592,593,831,830,829,828,827,835,834,841,840,839,838,837,846,845,844,843,842,851,850,849,848,847,858,857,856,855,854,863,862,861,860,859,872,871,870,869,868))",
            "cost_info": {
              "read_cost": "61.60",
              "eval_cost": "1.11",
              "prefix_cost": "104.09",
              "data_read_per_join": "88"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
592 366,374,301M
593 366,374,301M
827 301,367M,302
828 301,367M,302
829 302,301,367M
830 302,301,367M
831 302,301,367M
834 372,373M,301
835 372,373M,301
837 301,368M,302
838 301,368M,302
839 301,368M,302
840 302,301,368M
841 302,301,368M
842 368M,302,301
843 301,368M,302
844 301,368M,302
845 301,368M,302
846 301,368M,302
847 302,301,368M
848 368M,302,301
849 368M,302,301
850 301,368M,302
851 301,368M,302
854 301,369M,302
855 302,301,369M
856 369M,302,301
857 369M,302,301
858 301,369M,302
859 301,369M,302
860 301,369M,302
861 302,301,369M
862 302,301,369M
863 369M,302,301
868 301,369M,302
869 301,369M,302
870 301,369M,302
871 301,369M,302
872 302,301,369M