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 ක් ක්රියාත්මක වේ!
විස්තර කරන ලද කාර්යයේ විශේෂ උගුල නම්, වෙබ් අඩවිය වැඩි දියුණු කිරීමේදී දත්ත සමුදාය කුඩා වන අතර විමසුම් ඉතා වේගයෙන් ක්රියාත්මක වේ. කෙසේ වෙතත්, අඩවිය hosting හි ක්රියාකරන විට දත්ත සමුදාය වර්ධනය වේ, විමසුම් සියල්ලම මන්දගාමී වන අතර, ලූපයක තුළ විමසුම් සියයක් ක්රියාත්මක වීම නිසා වෙබ් අඩවිය මිනිත්තුවකට වඩා පූරණය වීමට හේතු විය හැකිය!
ඉතා සුළු උත්සාහයක් දැරීමෙන්, විමසුම් එකක් පමණක් ක්රියාත්මක වන පරිදි සකස් කළ හැකිය, මෙවැනිව:
<?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);
?>