nie za bardzo wiedzialem gdzie to wrzucic czy do php czy do baz, ostatecznie padło na bazy
mam taki kodzik w php
<?php $db -> Execute("UPDATE temida_users SET user_child = NULL"); $row = $db -> Execute("SELECT user_name,user_id, user_parent, user_child FROM temida_users WHERE u
ser_level <> 0 ORDER BY user_id"); foreach($row -> GetRows() as $cos){ if($cos["user_parent"] != 0){ $child_database = $db -> GetOne("SELECT user_child FROM temida_users WHERE user_id = '".$cos["user_parent"]."'"); } else{ } $db -> Execute("UPDATE temida_users SET user_child = '".serialize($childs)."' WHERE user_id = '".$cos["user_parent"]."'"); } } ?>
kod dziala na tabeli:
CREATE TABLE temida_users ( user_id int8 NOT NULL DEFAULT NEXTVAL('temida_users_user_id_seq'::regclass), user_parent int8 DEFAULT 0, user_child text, }
w user_child znajduje sie zserialozowana tablica z dziecmi danego usera.
no i niestety juz przy okolo 1200 wpisach w bazie, czas dzialania tego skryptu na serwerkach nazwa.pl to ponad 100 sekund, az boje sie sprawdzac co bedzie jak bedzie tego wiece
ma ktos pomysł na zoptymalizowanie tego?
UPDATE:
przysniło mi sie conieco i taki kod:
<?php $db -> Execute("BEGIN"); $db -> Execute("UPDATE temida_users SET user_child = NULL"); $row = $db -> Execute("SELECT user_id, user_parent FROM temida_users WHERE user_level <> 0 ORDER BY user_id"); $users = $row -> GetRows(); foreach($users as $cos){ if($cos["user_parent"] != 0){ } else{ } } } foreach ($tree as $a => $b){ } foreach ($tree2 as $a => $b){ $db -> Execute("UPDATE temida_users SET user_child = '".$b."' WHERE user_id = '".$a."'"); } $db -> Execute("COMMIT"); ?>
na tych samych danych czas dzialania 13 sekund. z czego 12 to wysłanie samych UPDATE do bazy, mysliCie ze da sie tutaj cos jeszcze wyciągnąc.