SELECT 
  cscart_products_categories.product_id, 
  GROUP_CONCAT(
    IF(
      cscart_products_categories.link_type = "M", 
      CONCAT(
        cscart_products_categories.category_id, 
        "M"
      ), 
      cscart_products_categories.category_id
    )
  ) AS category_ids, 
  product_position_source.position AS position 
FROM 
  cscart_products_categories 
  INNER JOIN cscart_categories ON cscart_categories.category_id = cscart_products_categories.category_id 
  AND cscart_categories.storefront_id IN (0, 1) 
  AND (
    cscart_categories.usergroup_ids = '' 
    OR FIND_IN_SET(
      0, cscart_categories.usergroup_ids
    ) 
    OR FIND_IN_SET(
      1, cscart_categories.usergroup_ids
    )
  ) 
  AND cscart_categories.status IN ('A', 'H') 
  LEFT JOIN cscart_products_categories AS product_position_source ON cscart_products_categories.product_id = product_position_source.product_id 
  AND product_position_source.category_id = 309 
WHERE 
  cscart_products_categories.product_id IN (
    976, 978, 968, 971, 636, 969, 972, 977, 
    1022, 1023, 1106, 1110, 1131, 1142, 
    1157, 1159, 1013, 1105, 1108, 1152, 
    1153, 1154, 1120, 1101, 1104, 1111, 
    1134, 1140, 1141, 979, 989, 632, 613, 
    617, 621, 622, 1015, 1016, 1018, 1019, 
    611, 612, 980, 1007, 1002, 638, 997, 
    990, 992, 985, 1012, 1020
  ) 
GROUP BY 
  cscart_products_categories.product_id

Query time 0.00139

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "120.40"
    },
    "grouping_operation": {
      "using_temporary_table": true,
      "using_filesort": true,
      "cost_info": {
        "sort_cost": "5.78"
      },
      "nested_loop": [
        {
          "table": {
            "table_name": "cscart_categories",
            "access_type": "ALL",
            "possible_keys": [
              "PRIMARY",
              "c_status",
              "p_category_id"
            ],
            "rows_examined_per_scan": 126,
            "rows_produced_per_join": 5,
            "filtered": "4.00",
            "cost_info": {
              "read_cost": "29.72",
              "eval_cost": "1.01",
              "prefix_cost": "30.73",
              "data_read_per_join": "20K"
            },
            "used_columns": [
              "category_id",
              "storefront_id",
              "usergroup_ids",
              "status"
            ],
            "attached_condition": "((`cscart`.`cscart_categories`.`storefront_id` in (0,1)) and ((`cscart`.`cscart_categories`.`usergroup_ids` = '') or find_in_set(0,`cscart`.`cscart_categories`.`usergroup_ids`) or find_in_set(1,`cscart`.`cscart_categories`.`usergroup_ids`)) and (`cscart`.`cscart_categories`.`status` in ('A','H')))"
          }
        },
        {
          "table": {
            "table_name": "cscart_products_categories",
            "access_type": "ref",
            "possible_keys": [
              "PRIMARY",
              "pt"
            ],
            "key": "PRIMARY",
            "used_key_parts": [
              "category_id"
            ],
            "key_length": "3",
            "ref": [
              "cscart.cscart_categories.category_id"
            ],
            "rows_examined_per_scan": 12,
            "rows_produced_per_join": 5,
            "filtered": "9.56",
            "index_condition": "(`cscart`.`cscart_products_categories`.`product_id` in (976,978,968,971,636,969,972,977,1022,1023,1106,1110,1131,1142,1157,1159,1013,1105,1108,1152,1153,1154,1120,1101,1104,1111,1134,1140,1141,979,989,632,613,617,621,622,1015,1016,1018,1019,611,612,980,1007,1002,638,997,990,992,985,1012,1020))",
            "cost_info": {
              "read_cost": "64.86",
              "eval_cost": "1.16",
              "prefix_cost": "107.69",
              "data_read_per_join": "92"
            },
            "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",
              "cscart.cscart_products_categories.product_id"
            ],
            "rows_examined_per_scan": 1,
            "rows_produced_per_join": 5,
            "filtered": "100.00",
            "cost_info": {
              "read_cost": "5.78",
              "eval_cost": "1.16",
              "prefix_cost": "114.62",
              "data_read_per_join": "92"
            },
            "used_columns": [
              "product_id",
              "category_id",
              "position"
            ]
          }
        }
      ]
    }
  }
}

Result

product_id category_ids position
611 310M
612 364,309M,363 0
613 311,355,309M 0
617 311,355,309M 0
621 355,311M
622 309M,355,311 0
632 359,309M,345 0
636 309M,310,350 0
638 365,309M,363 0
968 348M,309,310 0
969 310,349M,309 0
971 349M,309,310 0
972 309,310,350M 0
976 350M,309,310 0
977 350M,309,310 0
978 351M,309,310 0
979 352M,311,309 0
980 363,364M,309 0
985 309,363,364M 0
989 309,363,364M 0
990 364M,309,363 0
992 365M,309,363 0
997 365M,309,363 0
1002 363,365M,309 0
1007 309,363,365M 0
1012 365M,309,363 0
1013 309,356M,345 0
1015 345,309,357M 0
1016 345,309,357M 0
1018 345,309,358M 0
1019 309,358M,345 0
1020 309,360,346M 0
1022 309,347M,362 0
1023 309,361M,347 0
1101 345M
1104 345M
1105 345M
1106 363M
1108 345M
1110 363M
1111 345M
1120 345M
1131 363M
1134 345M
1140 345M
1141 345M
1142 363M
1152 345M
1153 345M
1154 345M
1157 363M
1159 363M