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, 
  product_position_source.position AS position 
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') 
  LEFT JOIN q_products_categories AS product_position_source ON q_products_categories.product_id = product_position_source.product_id 
  AND product_position_source.category_id = 190 
WHERE 
  q_products_categories.product_id IN (
    10514, 10341, 10353, 10366, 10367, 10371, 
    10372, 10373, 10374, 10022, 10026, 
    10031, 10033, 10035, 10036, 10037, 
    10038, 10041, 10042, 10045, 10046, 
    10048, 10051, 8682, 8214, 4584
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00091

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "132.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": 28,
            "rows_produced_per_join": 28,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (10514,10341,10353,10366,10367,10371,10372,10373,10374,10022,10026,10031,10033,10035,10036,10037,10038,10041,10042,10045,10046,10048,10051,8682,8214,4584))",
            "cost_info": {
              "read_cost": "59.61",
              "eval_cost": "5.60",
              "prefix_cost": "65.21",
              "data_read_per_join": "448"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "link_type"
            ]
          }
        },
        {
          "table": {
            "table_name": "product_position_source",
            "access_type": "eq_ref",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id",
              "product_id"
            ],
            "key_length": "6",
            "ref": [
              "const",
              "portal.q_products_categories.product_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 28,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "28.00",
              "eval_cost": "5.60",
              "prefix_cost": "98.81",
              "data_read_per_join": "448"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        },
        {
          "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": 5,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "28.00",
              "eval_cost": "1.12",
              "prefix_cost": "132.41",
              "data_read_per_join": "14K"
            },
            "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 position
4584 206M
8214 551M
8682 206M
10022 206M
10026 424M
10031 206M
10033 206M
10035 200M
10036 200M
10037 424M
10038 424M
10041 424M
10042 424M
10045 603,201M
10046 386M
10048 424M
10051 196M
10341 206M
10353 201M
10366 206M
10367 206M
10371 206M
10372 206M
10373 206M
10374 206M
10514 206M