2 query's in while loop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan Horden

Jan Horden

13/11/2008 19:50:00
Quote Anchor link
Ik heb het volgende probleem: Ik heb een forum en op de pagina waar alle posts te zien zijn geef ik de gebruikersnaam, tijd en posts etc. weer in een while loop. Nu wil ik ook het aantal posts per gebruiker weergeven. Dit moet echter in een aparte query gezien mijn datamodel. Hoe krijg ik dit voor elkaar?

Ik heb de volgende php code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
while($rij = mysql_fetch_array($result2)) {
    $reactie = smiley(str_replace(" ", "&nbsp;", wordwrap(str_replace("\n", "<br>", $rij["reactie"]), 90, "<br>")));
    echo("<tr>
            <td width=\"20%\" rowspan=\"2\" valign=\"top\"><font color=\"#0000FF\">"
.$rij["auteur"]. "</font><br>
            <font size=\"2\"><i>"
.$rij["type"]. "</i><br>
            Posts: #"
.$rij["aantal"]. "</font></td>");
    if($_SESSION["gnaam"] == $rij["auteur"] || isset($_SESSION["admin"])) {
        echo "<td><a href=\"edit_post.php?nr=" .$rij["nr"]. "\"><img src=\"images/edit.gif\" border=\"0\" alt=\"Edit\" align=\"right\"></a>";
    }

    else echo "<td>";
    echo "<font size=\"2\">Geplaatst op: ".$rij["datum"]."</font>";
    if(isset($rij["dt_edit"])) {
        echo "<br><font size=\"1\">Dit bericht is aangepast op " .$rij["dt_edit"]. " door " .$rij["name_edit"]. "</font></td></tr>";
    }

    else echo "</td></tr>";
    echo("<tr>
            <td valign=\"top\" width=\"80%\">"
.$reactie. "</td></tr>");
}

?>

Hier
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Posts: #" .$rij["aantal"]. "

moet dus het aantal posts komen te staan.
p.s. in $rij zitten alle reacties per topic en de user type etc alleen $rij["aantal"] bestaat dus niet aangezien die niet in dezelfde query kan.
 
PHP hulp

PHP hulp

23/11/2024 11:47:43
 
Frank -

Frank -

13/11/2008 20:47:00
Quote Anchor link
Quote:
Dit moet echter in een aparte query gezien mijn datamodel. Hoe krijg ik dit voor elkaar?

Welk datamodel? Ik zie nergens een datamodel.

Ik vermoed overigens dat je slechts 1 (sub-) query nodig hebt en dat je die absoluut niet in je while-lus wilt gaan uitvoeren. Het heeft geen enkele zin om keer op keer dezelfde query met dezelfde resultaten uit te gaan voeren. Of moet de boel soms langzamer worden?
 
Jan Horden

Jan Horden

13/11/2008 20:51:00
Quote Anchor link
zie ook: http://www.phphulp.nl/forum/showtopic.php?cat=12&id=56977&page=
Oftewel:
Tabel reactie:
<id> int (dit is het topic id)
nr int AUTO_INCREMENT
reactie varchar
<auteur> varchar (fkey van gebruikersnaam)
datum DATETIME

Tabel users:
id int AUTO_INCREMENT
<gebruikersnaam> varchar
voornaam varchar
achternaam varchar
email varchar
lid_sinds DATETIME
type enum

Tabel onderwerp:
id int
onderwerp varchar (naam vd topic)
<auteur> varchar (weer foreign key met gebruikersnaam)
datum datetime

p.s. ik ben me bewust van soms wat onduidelijke benaming in het model maar gelieve te focussen op het probleem.
 
- SanThe -

- SanThe -

13/11/2008 22:05:00
Quote Anchor link
<id> int (dit is het topic id)
Maar dan zeker wel zonder de < en >.
 
Jan Horden

Jan Horden

18/11/2008 16:24:00
Quote Anchor link
uhhh deze had ik dus beter topic_id kunnen noemen en is de foreign key van onderwerp.id. 'nr' is in deze tabel de primairy key. Ik wilde dat ik toen net zoveel wist als nu dan had ik zeker andere namen gekozen maar dat los ik nog wel op.

@pgFrank het zou best kunnen dat ik de query niet in de while lus moet uitvoeren maar ik zou niet weten hoe ik het zou moeten doen, aangezien er per user dus een ander aantal reacties moet komen te staan (eigenlijk net zoals hier). Iemand die me de goeie richting op kan werken want ik ben bang dat ik er met mijn beperkte kennis zelf niet op kom.
 
Jan Horden

Jan Horden

20/11/2008 00:12:00
Quote Anchor link
ik heb een oplossing gevonden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
while($rij = mysql_fetch_array($result2)) {
    $query3 = "SELECT auteur, COUNT(*) AS aantal
                FROM reactie
                WHERE auteur = '"
.$rij["auteur"]. "'
                GROUP BY auteur"
;
    $result3= mysql_query($query3) or die(mysql_error());
    $rij2 = mysql_fetch_array($result3);
    $reactie = smiley(str_replace(" ", "&nbsp;", wordwrap(str_replace("\n", "<br>", $rij["reactie"]), 90, "<br>")));
    echo("<tr>
            <td width=\"20%\" rowspan=\"2\" valign=\"top\"><font color=\"#0000FF\">"
.$rij["auteur"]. "</font><br>
            <font size=\"2\"><i>"
.$rij["type"]. "</i><br>
            Posts: #"
.$rij2["aantal"]. "</font></td>");
    if((isset($_SESSION["gnaam"]) && $_SESSION["gnaam"] == $rij["auteur"]) || isset($_SESSION["admin"])) {
        echo "<td><a href=\"edit_post.php?nr=" .$rij["nr"]. "\"><img src=\"images/edit.gif\" border=\"0\" alt=\"Edit\" align=\"right\"></a>";
    }

    else echo "<td>";
    echo "<font size=\"2\">Geplaatst op: ".$rij["datum"]."</font>";
    if(isset($rij["dt_edit"])) {
        echo "<br><font size=\"1\">Dit bericht is aangepast op " .$rij["dt_edit"]. " door " .$rij["name_edit"]. "</font></td></tr>";
    }

    else echo "</td></tr>";
    echo("<tr>
            <td valign=\"top\" width=\"80%\">"
.$reactie. "</td></tr>");
}

?>


iemand een betere suggestie?
 
Jan Horden

Jan Horden

20/11/2008 00:58:00
Quote Anchor link
oeps ik wilde editen ipv quoten :\ en wel als volgt:
edit: ben bang dat dit hetgeen is wat pgFrank bedoelt en dat dit tijdverlies is!
Gewijzigd op 01/01/1970 01:00:00 door Jan Horden
 
Jan Horden

Jan Horden

23/11/2008 13:19:00
Quote Anchor link
Niemand een suggestie hoe het beter kan?
 
Klaasjan Boven

Klaasjan Boven

23/11/2008 13:34:00
Quote Anchor link
Nou begin eens met het netjes uit schrijven.
Gebruik enkele ' ipv " dan hoef je niet \
dat zou al een stuk schelen

ow ja font wordt eigenlijk niet meer ondersteund
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Jan Horden

Jan Horden

23/11/2008 13:37:00
Quote Anchor link
met enkele ' kan ik toch geen variabelen gebruiken?
Toegegeven dr zijn wel een aantal regels waar ik ' zou kunnen gebruiken ipv " maar dat lost de \" niet op!

edit: en hoe moet ik font oplossen dan?
Gewijzigd op 01/01/1970 01:00:00 door Jan Horden
 
Klaasjan Boven

Klaasjan Boven

23/11/2008 13:50:00
Quote Anchor link
ik zou het zo doen, vind ik wat duidelijk
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
49
50
51
52
53
54
<?php
while($rij = mysql_fetch_array($result2)){
    
    $query3     =     "SELECT auteur, COUNT(*) AS aantal
                    FROM reactie
                    WHERE auteur = '"
.$rij["auteur"]. "'
                    GROUP BY auteur"
;
    
    $result3    =     mysql_query($query3) or die(mysql_error());
    $rij2         =     mysql_fetch_array($result3);
    $reactie     =     smiley(str_replace(" ", "&nbsp;", wordwrap(str_replace('\n', '<br>', $rij['reactie']), 90, '<br>')));
?>

    
    <tr>
       <td width="20%" rowspan="2" valign="top">
               <font color="#0000FF">"    <?php echo $rij["auteur"];         ?></font><br>
               <font size="2"><i>        <?php echo $rij["type"];         ?></i><br>
            Posts: #"                 <?php echo $rij2["aantal"];     ?></font>
       </td>
<?php
      
    if((isset( $_SESSION["gnaam"]) && $_SESSION["gnaam"] == $rij["auteur"]) || isset($_SESSION["admin"])) {
    ?>
    
        <td>
            <a href="edit_post.php?nr=" <?php echo $rij["nr"]; ?>">
            <img src="images/edit.gif"
            border="0" alt="Edit" align="right">
            </a>
            
<?php            
    }
    else
    ?>

        <td>
            <font size="2">Geplaatst op: <?php echo $rij["datum"]; ?></font>
<?php
  
    if(isset($rij["dt_edit"])) {
    ?>

  
        <br>
            <font size="1">
                Dit bericht is aangepast op <?php echo $rij["dt_edit"]; ?>
                door <?php echo $rij["name_edit"]; ?>
            </font>
        </td>
        </tr>
<?php //enzovoort        
    }
    else echo "</td></tr>";
    echo("<tr>
            <td valign=\"top\" width=\"80%\">"
.$reactie. "</td></tr>");
}

?>
 
Jan Horden

Jan Horden

23/11/2008 13:59:00
Quote Anchor link
hmmm het lost de \" idd wel op maar ik vind het totaal niet overzichtelijk, want het kost je 2x zoveel regels code. Maar ik snap dat je met grote project er zo wel makkelijker commentaar tussen kan voegen en dat dat uiteindelijk wel bijdraagd aan de duidelijkheid.

Maar nu zit ik nog met het punt dat ik het gevoel heb dat ik de boel vertraag door de query in de while lus uit te voeren zoals pgFrank zei! Kan dit dus sneller?

En hoe moet ik font dan regelen? alles via CSS?
 
Klaasjan Boven

Klaasjan Boven

23/11/2008 14:17:00
Quote Anchor link
Inderdaad font los je op met CSS en een class. Wat Frank bedoelt is dat het niet waarschijnlijk is dat het goed is dat je dit met een apparte query doet. Dit duidt op een onjuist datamodel
 
Jan Horden

Jan Horden

23/11/2008 14:30:00
Quote Anchor link
Dat datamodel heb ik al laten bekijken in de php & sql sectie en daar werd me verteld dat dit 2 aparte query's moesten zijn en dat dit onmogelijk in 1 query kon! Vandaar dat ik het dus in php wil afhandelen en hier met de vraag kwam! Maar ik heb het opgelost bij deze denk ik dan!

Thx voor de hulp allemaal!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.