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

Query time 0.00107

JSON explain

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

Result

product_id category_ids
827 301,302,367M
828 301,302,367M
829 302,367M,301
830 301,302,367M
831 301,302,367M
837 301,302,368M
838 301,302,368M
839 301,302,368M
840 368M,301,302
841 301,302,368M
842 301,302,368M
843 301,302,368M
844 301,302,368M
845 301,302,368M
846 368M,301,302
847 302,368M,301
848 301,302,368M
849 301,302,368M
850 301,302,368M
851 301,302,368M
852 301,302,369M
853 302,369M,301
854 301,302,369M
855 301,302,369M
856 301,302,369M
857 301,302,369M
858 301,302,369M
859 369M,301,302
860 301,302,369M
861 301,302,369M
862 301,302,369M
863 301,302,369M
868 301,302,369M
869 301,302,369M
870 302,369M,301
871 301,302,369M
872 301,302,369M
873 301,302,370M
874 301,302,370M