⊗ppSpOtSQ 92 of 95 menu

SQL sorğularının PHP-də optimallaşdırılması

Verilənlər bazasına SQL sorğularının yerinə yetirilməsi çox yavaş əməliyyatdır. Buna görə də bazaya sorğuların sayını minimuma endirməyə çalışmalıyıq.

Ən çox yayılmış səhv, dövr içində çoxlu SQL sorğularının yerinə yetirilməsidir, halbuki istəni bir əmrlə yerinə yetirməyə imkan verən alternativ sorğular mövcuddur.

Nümunəyə baxaq.

Tutaq ki, bizə verilənlər bazasında qeydlərin id-lərindən ibarət massiv verilib və biz həmin id-li qeydləri silməliyik.

Uzun düşünmədən belə "gözəl" bir konstruksiya yaza bilərik:

<?php $ids = [1, 2, 3, 4, 5]; // silinəcək massiv foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

Bu kodun problemi ondadır ki, dövr içində çoxlu sorğu yerinə yetirilir. Təsəvvür edin ki, massivdə 100 element var - bazaya 100 sorğu yerinə yetiriləcək!

Təsvir olunan vəzifənin xüsusi tələsi ondadır ki, vebsaytı inkişaf etdirərkən verilənlər bazası kiçik olur və sorğular çox tez yerinə yetirilir. Lakin, vebsayt xostingdə işlədikcə baza böyüyəcək, sorğular getdikcə daha yavaş yerinə yetiriləcək, və o vaxt gələ bilər ki, dövr içində yüzlərlə sorğunun yerinə yetirilməsinə görə vebsayt bir dəqiqədən çox yüklənəcək!

Çox az səy sərf etməklə, cəmi bir sorğunun yerinə yetirilməsini təmin etmək olar, bunun üçün belə edə bilərik:

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // '1,2,3,4,5' sətrini alarıq mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

Aşağıdakı kodu optimallaşdırın:

<?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); ?>
idazhuenuz