Käytössä PHP 8.x. Tietokanta vaihtui MySQL 8.1 -> 8.4 ja samalla lakkasi toimimasta SQL-lauseke. Vanha toimi riittävän nopeasti, mutta uusi versio kestää ja kestää...
Olisiko antaa vinkkiä, miten 8.4:ssä toimivan SQL-lausekkeen saisi aikaiseksi niin, että se tekisi 100 %:sti saman asian kuin aiempi lauseke, mutta nopeasti?
Toimii MySQL 8.1:ssä:
$kysely = $this->yhteys->prepare("SELECT
kaaviopohjien_kierrosten_ottelupaikat.ottelunumero AS ottelunumero,
kilpailuiden_kaavioiden_erapistetilanteet.peli_monesko_era_ottelussa,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistesarja,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistetilanne,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistevoittoon,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistesarja,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistetilanne,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistevoittoon,
kilpailuiden_kaavioiden_ottelut.peli_pelimuoto_id
FROM kilpailuiden_kaavioiden_ottelut
/* täytyy löytyä */ INNER JOIN kaaviopohjien_kierrosten_ottelupaikat ON kaaviopohjien_kierrosten_ottelupaikat.id = kilpailuiden_kaavioiden_ottelut.kaaviopaikka_id
/* täytyy löytyä */ INNER JOIN kaaviopohjien_kierrokset ON kaaviopohjien_kierrokset.id = kaaviopohjien_kierrosten_ottelupaikat.kierros_id
/* täytyy löytyä */ INNER JOIN kilpailuiden_kaavioiden_erapistetilanteet ON kilpailuiden_kaavioiden_erapistetilanteet.kisakaavion_ottelun_peli_id = kilpailuiden_kaavioiden_ottelut.id
AND kilpailuiden_kaavioiden_erapistetilanteet.id = (SELECT MAX(id)
FROM kilpailuiden_kaavioiden_erapistetilanteet AS tilanteet
WHERE tilanteet.kisakaavion_ottelun_peli_id = kilpailuiden_kaavioiden_erapistetilanteet.kisakaavion_ottelun_peli_id
AND tilanteet.peli_monesko_era_ottelussa = kilpailuiden_kaavioiden_erapistetilanteet.peli_monesko_era_ottelussa)
WHERE kilpailuiden_kaavioiden_ottelut.kaavio_id = ?
GROUP BY
kaaviopohjien_kierrosten_ottelupaikat.ottelunumero,
kilpailuiden_kaavioiden_erapistetilanteet.peli_monesko_era_ottelussa,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistesarja,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistetilanne,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistevoittoon,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistesarja,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistetilanne,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistevoittoon,
kilpailuiden_kaavioiden_ottelut.peli_pelimuoto_id");
$kysely->bindValue(1, intval($kaavio_id), PDO::PARAM_INT);
$kysely->execute();Toimii MySQL 8.4:ssä:
$kysely = $this->yhteys->prepare("SELECT
kaaviopohjien_kierrosten_ottelupaikat.ottelunumero AS ottelunumero,
kilpailuiden_kaavioiden_erapistetilanteet.peli_monesko_era_ottelussa,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistesarja,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistetilanne,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistevoittoon,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistesarja,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistetilanne,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistevoittoon,
kilpailuiden_kaavioiden_ottelut.peli_pelimuoto_id
FROM kilpailuiden_kaavioiden_ottelut
INNER JOIN kaaviopohjien_kierrosten_ottelupaikat
ON kaaviopohjien_kierrosten_ottelupaikat.id = kilpailuiden_kaavioiden_ottelut.kaaviopaikka_id
INNER JOIN kaaviopohjien_kierrokset
ON kaaviopohjien_kierrokset.id = kaaviopohjien_kierrosten_ottelupaikat.kierros_id
INNER JOIN kilpailuiden_kaavioiden_erapistetilanteet
ON kilpailuiden_kaavioiden_erapistetilanteet.kisakaavion_ottelun_peli_id = kilpailuiden_kaavioiden_ottelut.id
WHERE kilpailuiden_kaavioiden_ottelut.kaavio_id = ?
/* TÄMÄ ON MUUTETTU: Käytetään pääkyselyn ottelu-ID:tä alikyselyssä */
AND kilpailuiden_kaavioiden_erapistetilanteet.id = (
SELECT MAX(id)
FROM kilpailuiden_kaavioiden_erapistetilanteet AS tilanteet
WHERE tilanteet.kisakaavion_ottelun_peli_id = kilpailuiden_kaavioiden_ottelut.id
AND tilanteet.peli_monesko_era_ottelussa = kilpailuiden_kaavioiden_erapistetilanteet.peli_monesko_era_ottelussa
)
GROUP BY
kaaviopohjien_kierrosten_ottelupaikat.ottelunumero,
kilpailuiden_kaavioiden_erapistetilanteet.peli_monesko_era_ottelussa,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistesarja,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistetilanne,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_a_pistevoittoon,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistesarja,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistetilanne,
kilpailuiden_kaavioiden_erapistetilanteet.peli_paikka_b_pistevoittoon,
kilpailuiden_kaavioiden_ottelut.peli_pelimuoto_id");
$kysely->bindValue(1, intval($kaavio_id), PDO::PARAM_INT);
$kysely->execute();