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 = 3 
WHERE 
  q_products_categories.product_id IN (
    37553, 37554, 37555, 37557, 37558, 37559, 
    37560, 37561, 37562, 37563, 37820, 
    37821, 37822, 37823, 37824, 37825, 
    37826, 37827, 37832, 37833, 37850, 
    37858, 37862, 37864, 37867, 37868, 
    37869, 37872, 37873, 37874
  ) 
GROUP BY 
  q_products_categories.product_id

Query time 0.00102

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "223.81"
    },
    "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": 51,
            "rows_produced_per_join": 51,
            "filtered": "100.00",
            "index_condition": "(`portal`.`q_products_categories`.`product_id` in (37553,37554,37555,37557,37558,37559,37560,37561,37562,37563,37820,37821,37822,37823,37824,37825,37826,37827,37832,37833,37850,37858,37862,37864,37867,37868,37869,37872,37873,37874))",
            "cost_info": {
              "read_cost": "91.21",
              "eval_cost": "10.20",
              "prefix_cost": "101.41",
              "data_read_per_join": "816"
            },
            "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": 51,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "51.00",
              "eval_cost": "10.20",
              "prefix_cost": "162.61",
              "data_read_per_join": "816"
            },
            "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": 10,
            "filtered": "20.00",
            "cost_info": {
              "read_cost": "51.00",
              "eval_cost": "2.04",
              "prefix_cost": "223.81",
              "data_read_per_join": "26K"
            },
            "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
37553 39M
37554 39M
37555 39M
37557 39M
37558 5M
37559 39M
37560 4M
37561 4M
37562 4M
37563 4M
37820 5M
37821 5M
37822 4M
37823 4M
37824 4M
37825 5M
37826 4M
37827 5M
37832 39M
37833 4M
37850 4M
37858 3M 0
37862 5M
37864 5M
37867 39M
37868 39M
37869 39M
37872 4M
37873 4M
37874 39M