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 (
    32517, 32518, 32520, 32522, 32523, 32524, 
    32525, 32526, 32527, 32528, 32529, 
    32530, 32532, 32533, 32534, 32535, 
    32537, 32538, 32539, 32540, 32541, 
    32542, 32543, 32544, 32545, 32546, 
    32548, 32549, 32550, 32551, 32552, 
    32553
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00092

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "128.21"
    },
    "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": 37,
            "rows_produced_per_join": 37,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (32517,32518,32520,32522,32523,32524,32525,32526,32527,32528,32529,32530,32532,32533,32534,32535,32537,32538,32539,32540,32541,32542,32543,32544,32545,32546,32548,32549,32550,32551,32552,32553))",
            "cost_info": {
              "read_cost": "76.41",
              "eval_cost": "7.40",
              "prefix_cost": "83.81",
              "data_read_per_join": "592"
            },
            "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": "37.00",
              "eval_cost": "1.48",
              "prefix_cost": "128.21",
              "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
32517 97M
32518 97M
32520 96M
32522 96M
32523 96M
32524 96M
32525 96M
32526 97M
32527 97M
32528 97M
32529 97M
32530 96M
32532 96M
32533 97M
32534 97M
32535 97M
32537 96M
32538 96M
32539 96M
32540 96M
32541 96M
32542 96M
32543 96M
32544 97M
32545 97M
32546 96M
32548 96M
32549 96M
32550 96M
32551 96M
32552 97M
32553 97M