Vraag & Antwoord

Webprogrammeren & scripting

Repeat region en (SQL)COUNT-probleem

9 antwoorden
  • 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
  • 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.
  • Hallo WillyF, Bedankt voor de suggestie; Ik heb dat ook al eens geprobeerd, maar kreeg hetzelfde resultaat. Ik zal het gewoon nog een keer proberen, misschien had ik toen iets over het hoofd gezien. Andere oplossingen zijn nog steeds welkom, Djurre
  • 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. <font size=-1>[ Dit Bericht is bewerkt door: Annie op 2002-02-20 11:17 ]</font>
  • '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:
  • 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:)
  • [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.
  • 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
  • Oh, had hij het daar over, nee sorry, dan werkt het niet. Djurre

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.