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 (
    32785, 32786, 32787, 32788, 32789, 32790, 
    32791, 32792, 32793, 32794, 32795, 
    32796, 32797, 32798, 32799, 32800, 
    32801, 32802, 32803, 32804, 32805, 
    32806, 32807, 32808, 32809, 32810, 
    32811, 32812, 32813, 32814, 32815, 
    32816
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00084

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "172.41"
    },
    "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": 54,
            "rows_produced_per_join": 54,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809,32810,32811,32812,32813,32814,32815,32816))",
            "cost_info": {
              "read_cost": "96.81",
              "eval_cost": "10.80",
              "prefix_cost": "107.61",
              "data_read_per_join": "864"
            },
            "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": 10,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "54.00",
              "eval_cost": "2.16",
              "prefix_cost": "172.41",
              "data_read_per_join": "28K"
            },
            "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
32785 96M
32786 97M
32787 97M
32788 97M
32789 97M
32790 97M
32791 97M
32792 97M
32793 97M
32794 97M
32795 97M
32796 97M
32797 97M
32798 97M
32799 97M
32800 97M
32801 97M
32802 97M
32803 97M
32804 97M
32805 97M
32806 97M
32807 97M
32808 97M
32809 97M
32810 97M
32811 97M
32812 97M
32813 97M
32814 97M
32815 96M
32816 96M