Ga naar inhoud

Repeat region en (SQL)COUNT-probleem


anoniem

Aanbevolen berichten

Goeiemorgen iedereen, Zou iemand mij kunnen helpen met het volgende probleem: Voor onze website is het de bedoeling dat geplaatste advertenties met hun reacties door de adverteerder bekeken kunnen worden. De binnenkomstpagina voor deze gebruiker bevat dan de volgende tabel(kolommen): Advert.titel, Geplaatst op:, Prov., Type, Categorie, Aantal Reactie(s). Op de tabel-rij hieronder heb ik een repeat region gezet zodat de data afkomstig uit de MySQL-database netjes herhaald wordt. Dit werkt prima, alleen de waardes voor 'Aantal Reacties' blijven steeds hetzelfde, omdat hij (denk ik) de waarde die bij de eerste advertentie hoort overneemt en kopieert in de volgende rij(en). Ik zal de SQL er even bij plakken: SELECT COUNT(advertentienummer) AS cnt FROM reacties WHERE reacties.advertentienummer='$advertnr'; de variabele $advertnr heeft in PHP de waarde gekregen van een veld in een andere Recordset, nl. '$Rs_advert_main->Fields("advertentienummer");'. Uit deze recordset wordt de overige alle data behalve de 'Reacties' gehaald - deze komen uit een andere SQL-tabel. Dus als ik de $cnt-var. echo in de repeat region wordt er niet gekeken naar de individuele advertentie(nummer(s)). Wat doe ik fout? Het principe moet in iedergeval toch kunnen werken? Alvast bedankt voor de moeite, Djurre Adema GoMotion
Link naar reactie
Uit je beschrijving krijg ik het idee dat de SQL voor het aantal reacties, maar 1x wordt afgedraaid, waarschijnlijk met het advertentienummer van het eerste record uit je set. En dat daardoor steeds het zelfde getal wordt getoond. Wat je waarschijnlijk moet hebben, is dat, voordat elke regel Advert.titel, Geplaatst op:, Prov., Type, Categorie, Aantal Reactie(s). wordt getoond, de SQL voor het aantal reacties moet worden uitgevoerd of zo.
Link naar reactie
Als je voor elk advertentienummer uit je andere query de count wil bepalen dan moet je de count() query binnen de loop telkens opnieuw uit te voeren. In pseudo code: [code:1:ec4bf60ada] select advertenties foreach advertentie { print advertentie gegevens select count as reacties where advertentienummer=huidig print reacties } [/code:1:ec4bf60ada] Bij een groot aantal advertenties zal er dus een groot aantal queries uitgevoerd moeten worden. Dit gaat natuurlijk ten koste van de parsetijd van je pagina. Mogelijke oplossingen hiervoor zijn de-normaliseren (count bijhouden in de tabel van je advertenties). Of 1 query uitvoeren voor alle counts (met GROUP BY) en deze in een array dumpen. Bij afdrukken van je advertenties kan je dan het juiste element uit je array erbij zoeken. /disclaimer: hoog brainstorm gehalte, dus kan zijn dat een sommige van bovenstaande dingen domweg niet mogelijk zijn (in jouw situatie) :wink: kwestie van dingetjes uitproberen. /edit: Hmm, werken en forummen gaan niet goed samen (of ik kan niet multi-tasken) :wink:. Toen ik begon met m'n verhaaltje stonden er nog geen reacties. [ Dit Bericht is bewerkt door: Annie op 2002-02-20 11:17 ]
Link naar reactie
'morgen Annie, Bedankt voor je reactie :wink: Hé, nu je het zegt: de-normaliseren of werken met arrays zou als het even meezit kunnen werken. Ik moet ook zeggen; door de vele variabelen en SQL-JOIN queries zie ik soms door de bomen het bos niet meer :wink: Ik zal al je oplossingen uitproberen. Het beste, Djurre PS: ben ondertussen ook op phpfreakz.nl aan het posten/reageren - multitasking is ook niet mijn ding - :wink: En ja, dit is echt een snel reagerend forum - goeie zaak. :smile:
Link naar reactie
Annie's voorstel om de count bij te houden in de Tabel zelf, is misschien wel het gemakkelijkst. Ik ken dat MySQL en PHP natuurlijk niet zo goed, wat ik wel weet van ASP en Access, is dat ik een query uit Access rechtstreeks kon benaderen via ASP. Zou je dan een query kunnen maken, in MySQL die de counts van reacties combineert met de tabel van advertenties, en [i:18bddc043f]die[/i:18bddc043f] query dan benaderen via PHP. (Of zit ik iets onzinnigs te debiteren :smile:)
Link naar reactie
[quote:522691dc58] Op 20-02-2002 11:43, schreef WillyF: Annie's voorstel om de count bij te houden in de Tabel zelf, is misschien wel het gemakkelijkst. Ik ken dat MySQL en PHP natuurlijk niet zo goed, wat ik wel weet van ASP en Access, is dat ik een query uit Access rechtstreeks kon benaderen via ASP. Zou je dan een query kunnen maken, in MySQL die de counts van reacties combineert met de tabel van advertenties, en [i:522691dc58]die[/i:522691dc58] query dan benaderen via PHP. (Of zit ik iets onzinnigs te debiteren :smile:) [/quote:522691dc58] Kan het verhaal niet helemaal volgen, maar als je sub-selects bedoelt moet ik je teleurstellen. Dat ondersteunt mysql (nog) niet.
Link naar reactie
Jawel, met bijvoorbeeld een INNER JOIN-query, maar in mijn geval gaat dit (volgens mij althans; heb het geprobeerd) niet werken, omdat er bij mij simpelweg teveel variabelen zijn. Vb: De SQL die de adverteerder- en zijn/haar advertentiegegevens geeft: SELECT * FROM advertenties, adverteerder WHERE adverteerder.usernaam = '$usernaam' AND advertenties.user='$usernaam' Dan de SQL die het aantal reacties op deze advertenties 'moet' weergeven: SELECT COUNT(advertentienummer) AS cnt FROM reacties WHERE reacties.advertentienummer='$advertnr' Bedankt voor je reactie overigens, :wink: Djurre
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...