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 (
    32484, 32485, 32486, 32487, 32488, 32489, 
    32490, 32491, 32492, 32493, 32494, 
    32495, 32496, 32497, 32499, 32500, 
    32501, 32502, 32503, 32504, 32505, 
    32506, 32507, 32508, 32509, 32510, 
    32511, 32512, 32513, 32514, 32515, 
    32516
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00105

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "123.01"
    },
    "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": 35,
            "rows_produced_per_join": 35,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (32484,32485,32486,32487,32488,32489,32490,32491,32492,32493,32494,32495,32496,32497,32499,32500,32501,32502,32503,32504,32505,32506,32507,32508,32509,32510,32511,32512,32513,32514,32515,32516))",
            "cost_info": {
              "read_cost": "74.01",
              "eval_cost": "7.00",
              "prefix_cost": "81.01",
              "data_read_per_join": "560"
            },
            "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": "35.00",
              "eval_cost": "1.40",
              "prefix_cost": "123.01",
              "data_read_per_join": "18K"
            },
            "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
32484 96M
32485 96M
32486 96M
32487 97M
32488 97M
32489 97M
32490 97M
32491 97M
32492 97M
32493 97M
32494 97M
32495 96M
32496 96M
32497 96M
32499 96M
32500 96M
32501 96M
32502 96M
32503 96M
32504 96M
32505 96M
32506 96M
32507 96M
32508 97M
32509 97M
32510 97M
32511 97M
32512 97M
32513 97M
32514 97M
32515 97M
32516 97M