PHP-те SQL сұранымдарын пайдалануды оңтайландыру
Дерекқорға SQL сұранымдарын орындау өте баяу операция болып табылады. Сондықтан дерекқорға сұранымдар санын барынша азайтуға тырысу керек.
Ең көп тараған қате - бұл цикл ішінде бірнеше SQL сұранымдарын орындау, сонымен бірге қажетті нәтижені бір командамен орындауға мүмкіндік беретін баламалы сұранымдар бар.
Мысалмен қарастырайық.
Бізде дерекқордағы жазбалардың id массиві
берілген және бізге осындай id бар жазбаларды
жою керек делік.
Ұзақ ойланбай, мынай "тамаша" конструкцияны жаза аламыз:
<?php
$ids = [1, 2, 3, 4, 5]; // жою үшін массив
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
Бұл кодтың мәселісі - циклде бірнеше сұраным орындалуда.
Массивте 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);
?>