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, 
    867, 866, 865, 864, 872, 871, 870, 869, 
    868, 874, 873, 878, 877, 876, 875
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00131

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "110.76"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "6.67"
      },
      "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": 6,
            "filtered": "11.12",
            "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,867,866,865,864,872,871,870,869,868,874,873,878,877,876,875))",
            "cost_info": {
              "read_cost": "61.60",
              "eval_cost": "1.33",
              "prefix_cost": "104.09",
              "data_read_per_join": "106"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        }
      ]
    }
  }
}

Result

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