Fórum térkép

Szerző
Üzenet
Ragadozo
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2008.05.08. Csütörtök 18:26
Hozzászólások: 638
Hozzászólás Elküldve: 2014.11.01. 21:18    Hozzászólás témája: Fórum térkép
Hozzászólás az előzmény idézésével
Egy fórumba készítettem egy Fórum térképet a "jumpbox" helyett, amivel a topik témákat is meg lehet jeleníteni.

Itt megnézhető: Fórum térkép

A módosítás elvileg tökéletesen működik.
Azonban előfordul, hogy néha véletlenszerűen ez a kép ugrik be.
Volt már úgy, hogy egy nap kétszer is bejött, de volt olyan, hogy egy hétig nem is láttam, pedig napi szinten fenn vagyok az oldalon.
Ugyanakkor, ha nyomok egy F5-öt (frissítést) az oldalon, minden rendben lesz újra, és nem hiányzik semmi.

Kép

Ez az egész csak akkor fut le, ha új topikot, vagy fórumtémát érzékel.

A lényege az, hogy egy adatbázis táblába berakja azt, amit a "jumpbox" egyébként is begyűjtene, majd utána ugyanabba a táblába berakja új sorokba a topikokra vonatkozó dolgokat is.
Ezután a hiányzó adatokat ez a rész kiegészíti.
Ez a forrásprogram, ami időnként gondot okoz néha, csak nem tudom, hogy mi miatt:

Kód:


         for ($i = 1; $i <= $fo_ossz; $i++)
         {
            $sorszam = (int) $i;
            
            $sql = 'SELECT forum_id, parent_id, left_id, right_id
               FROM ' . TERKEP_TABLE . '
               WHERE sor_id = ' . $sorszam;
            $result = $db->sql_query($sql);
            $row = $db->sql_fetchrow($result);

               $sql_arr = array(
               'forum_id'      => $row['forum_id'],
               'parent_id'      => $row['parent_id'],
               'left_id'      => $row['left_id'],
               'right_id'      => $row['right_id'],
               );

               $sql = 'UPDATE ' . TERKEP_TABLE . '   SET ' . $db->sql_build_array('UPDATE', $sql_arr) . '
                  WHERE forum_id = ' . $row['forum_id'] . ' AND sor_id > ' . $fo_ossz;
               $db->sql_query($sql);
            $db->sql_freeresult($result);                  
         }


Mit nem veszek megint észre???? :oops:

.

Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése
KillBill
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2007.03.26. Hétfő 5:42
Hozzászólások: 2258
Hozzászólás Elküldve: 2014.11.01. 22:12    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Pedig világosan látszik

A $row tömböd üres, tehát ebben az esetben az update parancsot le se szabadna futtatnod.

pl:

Kód:


if ($row)
{
               $sql_arr = array(
               'forum_id'      => $row['forum_id'],
               'parent_id'      => $row['parent_id'],
               'left_id'      => $row['left_id'],
               'right_id'      => $row['right_id'],
               );

               $sql = 'UPDATE ' . TERKEP_TABLE . '   SET ' . $db->sql_build_array('UPDATE', $sql_arr) . '
                  WHERE forum_id = ' . $row['forum_id'] . ' AND sor_id > ' . $fo_ossz;
               $db->sql_query($sql);
            $db->sql_freeresult($result); 
}


és ez mit takar? $fo_ossz

Nagyon érdekes sql parancs, hányszor fút le?

Felhasználó profiljának megtekintése Privát üzenet küldése Felhasználó weblapjának megtekintése MSN Messenger
Ragadozo
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2008.05.08. Csütörtök 18:26
Hozzászólások: 638
Hozzászólás Elküldve: 2014.11.01. 22:33    Hozzászólás témája:
Hozzászólás az előzmény idézésével
A $fo_ossz = a phpbb_forums táblából lekérdezett, és a phpbb_terkep táblába berakott sorok száma.
Ezután lekérdezi a phpbb_topics táblából az összes sort a szükséges adatokkal, és új sorokba berakja a phpbb_terkep táblába.

Ez a for ciklus pedig azt csinálja, hogy egyenként lekérdezi a phpbb_forums táblából érkezett adatokat, majd utána ezekkel az adatokkal kiegészíti, frissíti a phpbb_topics táblából lekérdezett adatokat, de csak azokat, amelyeknél a forum_id egyezik.

Remélem érthetően írtam le. :)

Most én találtam egy "hibát"(???)
Mert ahogy értelmeztem a hibajelzést, nem volt a forum_id-nek értéke, és ez nem tetszett neki.
Az adatbázisba pedig most, hogy újra átvizslattam, találtam egy sort, amibe egy Globális közlemény-ként kiemelt topik volt, és ott "0" értékű volt a forum_id.

Vissza vontam a Globális közlemény kiemelést, frissítettem az adatbázis táblát, most minden egyes bejegyzésnek megvan a megfelelő értéke, és nincsen (egyenlőre) hibajelzés.
Csak abba nem vagyok biztos, hogy tényleg ez lehetett-e a hiba.
:wink:

Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése
KillBill
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2007.03.26. Hétfő 5:42
Hozzászólások: 2258
Hozzászólás Elküldve: 2014.11.01. 23:40    Hozzászólás témája:
Hozzászólás az előzmény idézésével

Ragadozo írta:

Most én találtam egy "hibát"(???)
Mert ahogy értelmeztem a hibajelzést, nem volt a forum_id-nek értéke, és ez nem tetszett neki.
Ugyan ezt írtam :)

KillBill írta:

A $row tömböd üres
A for ciklus lényegét még most se értem mert szerintem azt egy lekéréssel is meglehetne oldani és nem kéne felesleges terhelés.
A $fo_ossz helyet tömböt kéne használj és akkor még az üres tömböt is elkerülöd.

A másik amit nem értek vagy nem látok a kódban az az, hogy ha nincs olyan bejegyzés akkor hol hozz létre új sort? Mert én csak frissítést látok.

Felhasználó profiljának megtekintése Privát üzenet küldése Felhasználó weblapjának megtekintése MSN Messenger
Ragadozo
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2008.05.08. Csütörtök 18:26
Hozzászólások: 638
Hozzászólás Elküldve: 2014.11.02. 10:54    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Nem raktam be az egészet, mert eléggé hosszú.

Az include/functions_content.php-ban a function make_jumpbox részt írtam át, a többi rész érintetlen.

Megjegyzem az éjjel azzal szórakoztam, hogy több alkalommal új topikokat, új fórumokat hoztam létre, majd ezeket véletlenszerűen töröltem, hogy újra létre kelljen hoznia a friss adatokat az adatbázis táblában.
Közben egy-két alkalommal a tábla teljes anyagát is ürítettem néha phpMyAdmin-ból, hogy szintén újra meg kelljen csinálnia.
Amióta kivettem abból az egyetlen topiktémából a Globális közlemény kiemelést, egyetlen egyszer sem jött fel ez a hiba, és azóta tökéletesen működik.

Abból indultam ki, amit már nagyjából ismerek. Nyilván van ugyanerre sokkal hatékonyabb, egyszerűbb, és elegánsabb megoldás is, de most a lényeg az volt, hogy működőképes legyen.

A terhelésnek szerintem nem sok jelentősége van, mivel a tábla tartalmának frissítése, újra írása csak akkor történik meg, ha új fórumtéma, vagy új topiktéma készül (vagy valamelyik törlésre kerül). Ez viszont olyan ritkán esik meg (talán átlagosan egy-két hetente egy alkalommal), hogy nem hiszem, ennek lenne terhelési jelentősége.
:wink:

Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése
Hozzászólások megtekintése:  

Nem készíthetsz új témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.

Hirdetés
Hirdetés