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 (
    32654, 32655, 32656, 32657, 32658, 32659, 
    32660, 32661, 32662, 32663, 32664, 
    32665, 32666, 32667, 32668, 32669, 
    32671, 32672, 32673, 32675, 32676, 
    32677, 32679, 32680, 32681, 32682, 
    32683, 32684, 32685, 32686, 32687, 
    32688
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00081

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 (32654,32655,32656,32657,32658,32659,32660,32661,32662,32663,32664,32665,32666,32667,32668,32669,32671,32672,32673,32675,32676,32677,32679,32680,32681,32682,32683,32684,32685,32686,32687,32688))",
            "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
32654 96M
32655 96M
32656 97M
32657 97M
32658 97M
32659 97M
32660 97M
32661 96M
32662 96M
32663 96M
32664 96M
32665 96M
32666 96M
32667 96M
32668 96M
32669 96M
32671 96M
32672 96M
32673 96M
32675 96M
32676 96M
32677 96M
32679 96M
32680 96M
32681 96M
32682 96M
32683 96M
32684 96M
32685 96M
32686 96M
32687 96M
32688 96M