[PHP / MYSQL] Verschillende plaatjes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
Zoals jullie weten: als je in een forum alles hebt gelezen, dan word het icoontje voor het gelezen forum anders.

Ik heb dat op het moment wel gerealiseerd met de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
        $Database->query("
            SELECT 
                tid, fid, replies
            FROM
                ".$MasterBB->var['sql_prefix']."topics
        ");
        
        while($x = $Database->get_row())
        {
            $topics[] = array( $x['fid'] => $x['tid']."|".$x['replies'] );
        }
        
        foreach ($topics as $key => $value)
        {
            foreach ($value as $key => $value)
            {
                if(isset($HTTP_COOKIE_VARS["masterbb_topic_".$key]) && 
                                          $HTTP_COOKIE_VARS["masterbb_topic_".$key] == $value)
                {
                    $icon[$key][] = 1;
                }
                else
                {
                    $icon[$key][] = 0;
                }
            }
        }
        foreach($icon as $key => $value)
        {
            if(in_array("0", $value))
            {
                $forumicon[$key] = "[img]\"".$rootpath."images/".$MasterBB->memberinfo['skin']."
/new-posts.jpg\"[/img]";
            }
            else
            {
                $forumicon[$key] = "[img]\"".$rootpath."images/".$MasterBB->memberinfo['skin']."
/no-new-posts.jpg\"[/img]";
            }
        }
        return $forumicon;


Zoals je ziet haalt hij eerst alle topics uit de database op, en kijkt daarna voor elk of het gelezen is of niet.

Zolang er niet zoveel topics zijn gaat dit goed, maar als er veel topics bestaan duurt dit een stuk langer, dus mijn vraag is: Maakt het dan echt zoveel uit, zo ja, wat is dan een goede oplossing hiervoor om het op te lossen :P

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Dit gaat natuurlijk lang duren. je loopt 3 keer dezelfde loop. Je kan toch beter alles in 1 keer inlezen en dan uitpoepen, ipv 3 keer een nieuwe array aanmaken en deze dan weer door te lopen

[edit]
PHP:
1
2
3
4
5
       foreach ($topics as $key => $value)
        {
            foreach ($value as $key => $value)
            {
             //--- etc
levert dit geen problemen op? de variable $key en $value gebruike je 2 keer.. een wat duidelijkere naamgeving werkt meestal ook wel handiger

[ Voor 46% gewijzigd door thomaske op 13-01-2003 17:12 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
wat er eigenlijk gebeurt is dit:
alle topics worden uit de database gehaalt, ze staan dan nog niet op het goede forum gesorteerd,
dat gebeurt in de 1e foreach
in de volgende foreach (waar in_array bijstaat) word gekeken of alles wel is gelezen ja of de nee, maar ik zal dr wel eens even naar kijken :)

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

codeweb schreef op 13 January 2003 @ 17:17:
wat er eigenlijk gebeurt is dit:
alle topics worden uit de database gehaalt, ze staan dan nog niet op het goede forum gesorteerd,
dat gebeurt in de 1e foreach
in de volgende foreach (waar in_array bijstaat) word gekeken of alles wel is gelezen ja of de nee, maar ik zal dr wel eens even naar kijken :)
Je kan in je query je gegevens ookal sorteren. Een stuk makkelijker en sneller:

code:
1
2
3
4
5
6
SELECT 
    tid, fid, replies 
FROM 
    topics 
ORDER BY
    tid, fid


meer info: Sorting Rows

[ Voor 8% gewijzigd door thomaske op 13-01-2003 19:45 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:52
Het boek "databases voor beginners" lijkt me hier van toepassing. ;).

Acties:
  • 0 Henk 'm!

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 17-09 16:36
na de 1e x dat hij alles uit de db haalt, ziet het er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Array
(
    [0] => Array
        (
            [1] => 3|0
        )

    [1] => Array
        (
            [1] => 4|0
        )

    [2] => Array
        (
            [7] => 6|0
        )

    [3] => Array
        (
            [1] => 7|0
        )

    [4] => Array
        (
            [1] => 8|0
        )

    [5] => Array
        (
            [1] => 9|0
        )

    [6] => Array
        (
            [1] => 10|0
        )

    [7] => Array
        (
            [1] => 11|0
        )

    [8] => Array
        (
            [7] => 12|0
        )

)


na al de 1e x foreach gevallen zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Array
(
    [1] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
            [4] => 0
            [5] => 0
            [6] => 0
        )

    [7] => Array
        (
            [0] => 0
            [1] => 0
        )

)

Zo is er dus te zien of er nog een topic ongelezen is (0) en dat bekijkt hij in de volgende foreach...

[ Voor 7% gewijzigd door codeweb op 14-01-2003 16:14 ]

Pagina: 1