Оптимизација на употребата на SQL барања во PHP
Извршувањето на SQL барања до базата на податоци е многу бавна операција. Затоа, потребно е да се трудиме да го минимизираме бројот на барања до базата.
Најчестата грешка е извршувањето на многубројни SQL барања во циклус, иако постојат алтернативни барања кои овозможуваат желаното да се изврши со една наредба.
Да погледнеме на пример.
Нека ни е даден array со id на записи
во базата на податоци и неопходно е да ги избришеме записите
со такви id.
Без многу размислување, може да се напише ваква "одлична" конструкција:
<?php
$ids = [1, 2, 3, 4, 5]; // array за бришење
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
Проблемот со овој код е што во циклусот се извршува
многубројни барања. Замислете си дека
во array-от ќе има 100 елементи - ќе се извршат
100 барања до базата!
Посебна стапица на опишаната задача е што при развојот на веб-страната базата на податоци е мала и барањата се извршуваат многу брзо. Сепак, со текот на времето и работата на страната на хостингот, базата ќе расте, барањата ќе се извршуваат се побавно, и може да дојде до ситуација каде што поради извршувањето на стотици барања во циклус страната ќе се вчитува повеќе од една минута!
Со вложување на многу малку напор, може да се направи така што ќе се изврши само едно барање, вака:
<?php
$ids = [1, 2, 3, 4, 5];
$str = implode(',', $ids); // ќе добиеме стринг '1,2,3,4,5'
mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
Оптимизирајте го кодот даден подолу:
<?php
$arr = [1, 2, 2, 4, 5];
$res = [];
for ($i = 1; $i < count($arr); $i++) {
$note = mysqli_query($link, "SELECT * FROM users WHERE id=$id");
for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row);
$res[] = $data;
}
var_dump($res);
?>