SELECT 
  q_products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      q_products_categories.link_type = "M", 
      CONCAT(
        q_products_categories.category_id, 
        "M"
      ), 
      q_products_categories.category_id
    )
  ) AS category_ids 
FROM 
  q_products_categories 
  INNER JOIN q_categories ON q_categories.category_id = q_products_categories.category_id 
  AND (
    q_categories.usergroup_ids = '' 
    OR FIND_IN_SET(0, q_categories.usergroup_ids) 
    OR FIND_IN_SET(1, q_categories.usergroup_ids)
  ) 
  AND q_categories.status IN ('A', 'H') 
WHERE 
  q_products_categories.product_id IN (
    30864, 30865, 30866, 30867, 30868, 30869, 
    30870, 30871, 30872, 30873, 30874, 
    30875, 30876, 30877, 30878, 30879, 
    30880, 30881, 30882, 30883, 30884, 
    30885, 30886, 30887, 30888, 30889, 
    30890, 30891, 30892, 30893, 30894, 
    30895
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00358

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "125.61"
    },
    "grouping_operation": {
      "using_filesort": false,
      "nested_loop": [
        {
          "table": {
            "table_name": "q_products_categories",
            "access_type": "range",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "pt",
            "used_key_parts": [
              "product_id"
            ],
            "key_length": "3",
            "rows_examined_per_scan": 36,
            "rows_produced_per_join": 36,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (30864,30865,30866,30867,30868,30869,30870,30871,30872,30873,30874,30875,30876,30877,30878,30879,30880,30881,30882,30883,30884,30885,30886,30887,30888,30889,30890,30891,30892,30893,30894,30895))",
            "cost_info": {
              "read_cost": "75.21",
              "eval_cost": "7.20",
              "prefix_cost": "82.41",
              "data_read_per_join": "576"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        },
        {
          "table": {
            "table_name": "q_categories",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "portal.q_products_categories.category_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 7,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "36.00",
              "eval_cost": "1.44",
              "prefix_cost": "125.61",
              "data_read_per_join": "19K"
            },
            "used_columns": [
              "category_id",
              "usergroup_ids",
              "status"
            ],
            "attached_condition": "(((`portal`.`q_categories`.`usergroup_ids` = '') or find_in_set(0,`portal`.`q_categories`.`usergroup_ids`) or find_in_set(1,`portal`.`q_categories`.`usergroup_ids`)) and (`portal`.`q_categories`.`status` in ('A','H')))"
          }
        }
      ]
    }
  }
}

Result

product_id category_ids
30864 184M
30865 189M
30866 509M
30867 187M
30868 153M
30869 167M
30870 584M
30871 6M
30872 64M
30873 183M
30874 448M
30875 189M
30876 180M
30877 187M
30878 454M
30879 545M
30880 371M
30881 597M
30882 184M
30883 184M
30884 184M
30885 436M
30886 368M
30887 160M
30888 184M
30889 166M
30890 187M
30891 478M
30892 160M
30893 446M
30894 184M
30895 160M