witam
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){
if(is_array($tree["".$cos["user_parent"].""])){ array_push($tree["".$cos["user_parent"].""], $cos["user_id"]); }
else{
$tree["".$cos["user_parent"].""] = array(); array_push($tree["".$cos["user_parent"].""], $cos["user_id"]); }
}
}
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.
Ten post edytował AcidBurnt 28.12.2005, 01:14:23