Binary Tree maken

Hulp nodig bij je installatie of kom je ergens niet uit? Probeer phpBB3! Problemen lossen we samen met je op.
phpBB 3.0 is End of support per 1 januari 2017. Dit forum is hier enkel ter archief. Het wordt aangeraden te upgraden naar phpBB 3.2
Forumregels
phpBB 3.0 is End of support per 1 januari 2017. Dit forum is hier enkel ter archief. Het wordt aangeraden te upgraden naar phpBB 3.2
Gesloten
Gebruikersavatar
David
Berichten: 5093
Lid geworden op: 15 jan 2007, 22:00
Locatie: Zeeuws-Vlaanderen
Contacteer:

Binary Tree maken

Bericht door David » 07 feb 2010, 15:46

Derky schreef:Het lijkt erop dat je Binary Tree dood is. :)
Wat dat is? Deze 'boom' houd bij in welke volgorde de forums staan en welke subforums van elkaar zijn.

Hoe lossen we dit op?
Maak eerst een back-up van je database.
Maak een bestand genaamd rebuild_tree.php aan en zet daarin het onderstaande. Voer daarna dit bestand uit en het moet weer werken. De forums zullen nu wel door de war staan maar dit was dus al zo, alleen zag je het niet. ;)

Code: Selecteer alles

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);


// Start session management
$user->session_begin();
$auth->acl($user->data);

/*
 Recalculate Binary Tree */

function recalc_btree($sql_id, $sql_table, $module_class = '')
{
    global $db;

    if (!$sql_id || !$sql_table)
    {
        return;
    }

    $sql_where = ($module_class) ? " WHERE module_class = '" . $db->sql_escape($module_class) . "'" : '';

    // Reset to minimum possible left and right id
    $sql = "SELECT MIN(left_id) as min_left_id, MIN(right_id) as min_right_id
        FROM $sql_table
        $sql_where";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);

    $substract = (int) (min($row['min_left_id'], $row['min_right_id']) - 1);

    if ($substract > 0)
    {
        $sql = "UPDATE $sql_table
            SET left_id = left_id - $substract, right_id = right_id - $substract
            $sql_where";
        $db->sql_query($sql);
    }

    $sql = "SELECT $sql_id, parent_id, left_id, right_id
        FROM $sql_table
        $sql_where
        ORDER BY left_id ASC, parent_id ASC, $sql_id ASC";
    $f_result = $db->sql_query($sql);

    while ($item_data = $db->sql_fetchrow($f_result))
    {
        if ($item_data['parent_id'])
        {
            $sql = "SELECT left_id, right_id
                FROM $sql_table
                $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
                    $sql_id = {$item_data['parent_id']}";
            $result = $db->sql_query($sql);

            if (!$row = $db->sql_fetchrow($result))
            {
                $sql = "UPDATE $sql_table SET parent_id = 0 WHERE $sql_id = " . $item_data[$sql_id];
                $db->sql_query($sql);
            }
            $db->sql_freeresult($result);

            $sql = "UPDATE $sql_table
                SET left_id = left_id + 2, right_id = right_id + 2
                $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
                    left_id > {$row['right_id']}";
            $db->sql_query($sql);

            $sql = "UPDATE $sql_table
                SET right_id = right_id + 2
                $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
                    {$row['left_id']} BETWEEN left_id AND right_id";
            $db->sql_query($sql);

            $item_data['left_id'] = $row['right_id'];
            $item_data['right_id'] = $row['right_id'] + 1;
        }
        else
        {
            $sql = "SELECT MAX(right_id) AS right_id
                FROM $sql_table
                $sql_where";
            $result = $db->sql_query($sql);
            $row = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);

            $item_data['left_id'] = $row['right_id'] + 1;
            $item_data['right_id'] = $row['right_id'] + 2;
        }
    
        $sql = "UPDATE $sql_table
            SET left_id = {$item_data['left_id']}, right_id = {$item_data['right_id']}
            WHERE $sql_id = " . $item_data[$sql_id];
        $db->sql_query($sql);
    }
    $db->sql_freeresult($f_result);
}

recalc_btree('forum_id', FORUMS_TABLE);

trigger_error("klaar!");

?>
Ik moet de binary tree gaan herstellen, ik ben naar dit bericht door verwezen. Hoe moet ik dit bestand precies uitvoeren? En waar moet ik het neerzetten? Hoe ga ik te werk?
Op zoek naar een vertaling voor je extensie? vertalingen

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20315
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Re: Binary Tree maken

Bericht door Paul » 07 feb 2010, 16:21

Je moet de instructies die derky aangaf volgen? Dan wordt de tree hersteld.

Gebruikersavatar
David
Berichten: 5093
Lid geworden op: 15 jan 2007, 22:00
Locatie: Zeeuws-Vlaanderen
Contacteer:

Re: Binary Tree maken

Bericht door David » 07 feb 2010, 16:26

Maar dat bestand, dat moet in in de root van me forum zetten neem ik aan? En dan in me webbrowser naar dat bestand toe gaan? En dan gaat de rest van zelf toch?

De tabellen heten phpbb3_ dus moet ik de phpbb_ aanpassen toch?
Op zoek naar een vertaling voor je extensie? vertalingen

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20315
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Re: Binary Tree maken

Bericht door Paul » 07 feb 2010, 16:39

David schreef:Maar dat bestand, dat moet in in de root van me forum zetten neem ik aan? En dan in me webbrowser naar dat bestand toe gaan? En dan gaat de rest van zelf toch?
Het al geprobeerd? Je hebt toch een backup, dus als het fout gaan kan je hem zo terug zetten.
De tabellen heten phpbb3_ dus moet ik de phpbb_ aanpassen toch?
Nee.

Gebruikersavatar
EelkeB
Berichten: 865
Lid geworden op: 13 mar 2009, 12:35
Locatie: Bussum

Re: Binary Tree maken

Bericht door EelkeB » 07 feb 2010, 17:13

Ter verduidelijking, welke phpbb_ had je willen veranderen? Er is er niet 1 die in een SQL-query voorkomt als prefix van de tabelnaam, want dat is allemaal netjes geregeld door het includen van common.php en het gebruik van de constante FORUMS_TABLE voor de tabel-naam.

Overigens, als je met zoveel vragen zit, zorg dan gewoon voor een lokale testomgeving waar je dit kunt uitproberen zonder direct schade te veroorzaken als het mis gaat. M.a.w., don't take our word for it, maar zorg gewoon voor je eigen zekerheid :) (Paul's tip om een backup te maken en het gewoon te proberen valt ook onder die categorie).
Dutch Open Projects
Mini Seven Club Nederland - Het grote forum voor het kleine autootje
Geen support via PM of mail

Gebruikersavatar
David
Berichten: 5093
Lid geworden op: 15 jan 2007, 22:00
Locatie: Zeeuws-Vlaanderen
Contacteer:

Re: Binary Tree maken

Bericht door David » 07 feb 2010, 17:24

Ik ben inmiddels bezig een test locatie te maken, om dit te doen ;) Alleen is het niet mijn website. Dus ik wil wel voorzichtig zijn en zeker zijn met wat ik doe, alleen de backup die ik heb is niet goed. Ik wilde deze op de test database zetten en kreeg de volgende melding:(

Code: Selecteer alles

Fout

Er schijnt een fout te zijn in uw SQL query. Mocht de MySQL server een error hebben terug gegeven, probeer dan of uw hiermee uw fout kunt oplossen.

ERROR: Onbekende Punctuatie String @ 5
STR: />
SQL: <br />
<b>Fatal error</b>:  Out of memory (allocated 87556096) (tried to allocate 84148630 bytes) in <b>/usr/local/cpanel/base/3rdparty/phpMyAdmin/export.php</b> on line <b>133</b><br />


SQL-query:

<br /> <b>Fatal error</b>: Out of memory (allocated 87556096) (tried to allocate 84148630 bytes) in <b>/usr/local/cpanel/base/3rdparty/phpMyAdmin/export.php</b> on line <b>133</b><br />

MySQL retourneerde: Documentatie
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<br />
<b>Fatal error</b>:  Out of memory (allocated 87556096) (tried to allocat' at line 1 
Op zoek naar een vertaling voor je extensie? vertalingen

Gebruikersavatar
EelkeB
Berichten: 865
Lid geworden op: 13 mar 2009, 12:35
Locatie: Bussum

Re: Binary Tree maken

Bericht door EelkeB » 07 feb 2010, 17:30

Kijk, ook zoiets. Wel handig om je *backup* te testen voor je rare dingen gaat doen :)

Het lijkt erop dat het backup-script tegen de geheugenlimiet van PHP is aangelopen bij het maken van de backup (voor de zekerheid, open eens de backup in een tekst-editor, komt die tekst uit de dump?). Je kunt proberen om de geheugenlimiet te verhogen, hoewel hij al redelijk hoog lijkt te staan (er zijn bijna 90 MB gealloceerd als het mis gaat). Misschien even kijken naar de opties die je gebruikt bij het maken van de backup. Andere mogelijkheid is om de dump in delen te maken.
Dutch Open Projects
Mini Seven Club Nederland - Het grote forum voor het kleine autootje
Geen support via PM of mail

Gebruikersavatar
David
Berichten: 5093
Lid geworden op: 15 jan 2007, 22:00
Locatie: Zeeuws-Vlaanderen
Contacteer:

Re: Binary Tree maken

Bericht door David » 08 feb 2010, 22:53

Ik weet niet wat het is :cry: Maar ik heb de back-up in delen gemaakt.... En heb zelf geprobeerd ze 1 voor 1 te maken. Maar alleen de eerste 28 tabellen krijg ik een goede back-up van de daar op volgende tabellen geven nog steeds de zelfde melding...

Onderstaande tekst staat er, als de foute back-up in notepad open!

Code: Selecteer alles

<br />
<b>Fatal error</b>:  Out of memory (allocated 87556096) (tried to allocate 84148277 bytes) in <b>/usr/local/cpanel/base/3rdparty/phpMyAdmin/export.php</b> on line <b>133</b><br />
Dat bestand kan ik op zich wel vinden, maar om daar nou in te gaan klooien zie ik niet zitten!

Er wordt contact gezocht met de host maar die is beperkt door dat die op vakantie is...

Kan ik zelf instellingen veranderen? zodat als nog back-up kan maken...
Op zoek naar een vertaling voor je extensie? vertalingen

Gebruikersavatar
headout
Berichten: 1082
Lid geworden op: 11 dec 2002, 19:55
Contacteer:

Re: Binary Tree maken

Bericht door headout » 09 feb 2010, 04:41

David schreef:Er wordt contact gezocht met de host maar die is beperkt door dat die op vakantie is...
Euhm, je bedoelt: die is ook wel eens 's weekends vrij. Wat hij/zij in het weekend uitvoert, is dan zijn/haar zaak :)
Houd jullie persoonlijke zaken buiten dit forum graag. En nu weer ontopic.
- Jim
Tip: maak eens een backup met phpMyAdmin. Of benader eens rechtstreeks de hoster. Die is best bereid om een kopietje te maken van de database en deze op een nieuwe database te importeren.
http://phpbb3.nl Jouw gratis forumprovider!

Gebruikersavatar
EelkeB
Berichten: 865
Lid geworden op: 13 mar 2009, 12:35
Locatie: Bussum

Re: Binary Tree maken

Bericht door EelkeB » 09 feb 2010, 09:05

Uit de foutmelding blijkt dat hij al phpMyAdmin gebruikt...
Dutch Open Projects
Mini Seven Club Nederland - Het grote forum voor het kleine autootje
Geen support via PM of mail

Gebruikersavatar
headout
Berichten: 1082
Lid geworden op: 11 dec 2002, 19:55
Contacteer:

Re: Binary Tree maken

Bericht door headout » 09 feb 2010, 15:28

EelkeB schreef:Uit de foutmelding blijkt dat hij al phpMyAdmin gebruikt...
Ik kan gelukkig foutmeldingen lezen ;)

Maar hoe hij phpMyAdmin gebruikt, op zijn kop, of via New York of met behulp van een handstand: hier kon ik zonder enig probleem een backupje maken via phpMyAdmin. Ik heb hem inmiddels al geinstrueerd (voordat er weet opmerkingen komen dat er enkel commentaar van mijn kant komt :))
http://phpbb3.nl Jouw gratis forumprovider!

Gebruikersavatar
David
Berichten: 5093
Lid geworden op: 15 jan 2007, 22:00
Locatie: Zeeuws-Vlaanderen
Contacteer:

Re: Binary Tree maken

Bericht door David » 09 feb 2010, 19:21

Ik heb de rebuild_tree.php uitgevoerd, de onderdelen lijken goed te staan, Ik kwam alleen onderstaand tegen... Dit hoort volgens mij niet zoo! Kan ik hier iets aan doen?

http://www.berner4life.com/Voorbeeldje.jpg

Ik heb de Cache en beheerder buffer geleegd, maar dat had geen zin!

_____________________________________________________________________

Het is al weg... Was even met iets bezig, en zie nu dat het opeens weg is!!
Op zoek naar een vertaling voor je extensie? vertalingen

Gesloten