Autor Zpráva
potom
Profil
Ahoj, poradíte prosím, jak zrychlit nebo řešit lépe? Trvá moc dlouho.

Zkusím vysvětlit: Jedná se o systém na rezervaci vstupenek:

Zjednodušeně - proměná $string obsahuje plánek sálu, který se přetransformuje na checkboxy - sedadla - obsazená neaktivní, volná aktivní:

$string= "[6kino10] [6kino9] [6kino8] [6kino7] [6kino6] [6kino5] [6kino4] [6kino3] [6kino2] [6kino1]
[7kino10] [7kino9] [7kino8] [7kino7] [7kino6] [7kino5] [7kino4] [7kino3] [7kino2] [7kino1]
[8kino10] [8kino9] [8kino8] [8kino7] [8kino6] [8kino5] [8kino4] [8kino3] [8kino2] [8kino1]
[9kino10] [9kino9] [9kino8] [9kino7] [9kino6] [9kino5] [9kino4] [9kino3] [9kino2] [9kino1]
[10kino10] [10kino9] [10kino8] [10kino7] [10kino6] [10kino5] [10kino4] [10kino3] [10kino2] [10kino1]
[11kino10] [11kino9] [11kino8] [11kino7] [11kino6] [11kino5] [11kino4] [11kino3] [11kino2] [11kino1]
[12kino10] [12kino9] [12kino8] [12kino7] [12kino6] [12kino5] [12kino4] [12kino3] [12kino2] [12kino1]
[13kino10] [13kino9] [13kino8] [13kino7] [13kino6] [13kino5] [13kino4] [13kino3] [13kino2] [13kino1]
[14kino10] [14kino9] [14kino8] [14kino7] [14kino6] [14kino5] [14kino4] [14kino3] [14kino2] [14kino1]
[15kino12] [15kino11] [15kino10] [15kino9] [15kino8] [15kino7] [15kino6] [15kino5] [15kino4] [15kino3] [15kino2] [15kino1]";




$newstring = preg_replace_callback('#\[(.*?)\]#', function($match) use($conn2,$get_novarezervace) {

//id sedadla v hranaté závorce se vyhledá v seznamu sedadel, zjistím jestli vůbec existuje, a zjistím jeho iterní ID
$qq = "SELECT id from position WHERE storno = '0' AND disabled = '0' AND seat_id= '$match[1]' order by sedadlo * 1 LIMIT 1 ";

$result2 = $conn2->query($qq);
if ($result2->num_rows > 0)
{while($positions = $result2->fetch_assoc()) {

//zjistím, jestli pro toto ID sedadla byla koupena vstupenka
$result3 = $conn2->query("SELECT id from tickets WHERE storno = '0' AND position = '$positions[id]'
AND refund_for_ticket IS NULL AND event_id = '$get_novarezervace' LIMIT 1");
if ($result3->num_rows > 0) {
while($tickets = $result3->fetch_assoc()) {

// obsazené sedadlo hodí disabled checkbox
$outext .= '<input class="styled " type="checkbox disabled" disabled><label for="seat'.$positions[id].'"></label>';

}}

else {

// volné sedadlo hodí funkční checkbox
$outext .= '<input id="seat'.$positions[id].'" class="styled  limitThree" name="seat'.$positions[id].'" type="checkbox" value="1" '.$dis_able.'><label for="seat'.$positions[id].'"></label>' ;

}

}}

return $outext;

},
$string
);

echo $newstring;

Poradíte jak udělat lépe a urychlit vykonání skriptu bez nějakého zásadního zásahu? Děkuji za pomoc.
blaaablaaa
Profil
potom:
Logika by měla být obrácená - v db bys měl vědět, jaká sedadla chceš vybrat, k nim si pak zjistit, zda už je obsazené či ne. Pak budeš mít jen jeden dotaz namísto 2n dotazů.

Případně, prasáčtěji a bez nutnosti úpravy struktury, lze vybrat všechna sedadla přes WHERE seat_id IN('6kino10', '6kino9', ...) a k nim pak přes LEFT JOIN na tickets doplnit informaci o obsazenosti.
N71
Profil *
potom:
Máš callback s dvěma SQL dotazy, který se opakuje cca 100×. Což je samozřejmě špatně. V databázi navíc používáš textové typy pro booleovské hodnoty (patrně bez indexu) a řadíš podle matematického výrazu (takže definitivně bez indexu). Velký špatný. Celé to smaž a začni znovu. Měl by ti stačit jeden SQL dotaz – získání všech rezervací. Podle nich pak vykresli rozhraní.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0