Toon posts:

[PHP] previous record in mysql_fetch_array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met een DO statement wandel ik door de rijen die uit mijn query komen. Nu wil ik graag kijken of ik in de vorige 'versie van het do statement' dezelfde waarde al gegeven heb, waarna hij niets moet afbeelden en door moet gaan.

Een kleine visuele toelichting lijkt me op zijn plaats :P

soort | totaal | comment
bier | 3 | blaat
bier | 3 | blaat
bier | 3 | blaat
grolsch | 2 | blaat
grolsch | 2 | blaat
kuch | 6 | tralala

Mijn query resulteerd dus in 3 keer bier en 2 keer koffie. Maar eigenlijk wil ik dat hij het afbeeld zodat hij de eerste keer bier & 3 zegt en dan nog 2 keer geen bier & 3 maar wel blaat.

Nu heb ik bedacht: laat hem checken of de vorige keer hetzelfde is gezegd als nu en beeld dan niets af. Alleen, hoe doe ik dat?

FYI:

code:
1
2
if ($row = mysql_fetch_array($result)) {
    do {

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 23:12
Gewoon ff onthouden he, zoiets dus:
PHP:
1
2
3
4
5
6
7
8
9
do {
 if (isset($lastbier) && $lastbier == $row['bier']) {
   $bieroutput = '';
 } else {
   $bieroutput = $row['bier']; $lastbier = $row['bier'];
 }
 
 echo $bieroutput;
} while ($condition);

[ Voor 31% gewijzigd door T-MOB op 13-05-2005 10:57 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Skar
  • Registratie: Juli 2001
  • Laatst online: 08-08 16:14
Snap ten eerste niet dat je een DO-WHILE loop doet... je kan ook gewoon een WHILE loop doen, maar ok... ieder z'n voorkeur :)

Maar - als ik het goed begrijp - je wil dus de eerste rij niet tonen als deze hetzelfde is als de vorige?
Volgens mij kan je het dan simpel oplossen door elke keer de waarde op te slaan in een variable en deze dan te checken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ($row = ....)
 do{
    //check of het veld hetzelfde is als het vorige veld
    if ($vorig_veld != $row["veld1"]){
        echo $row["veld1"]; //je veld
        $vorig_veld = $row["veld1"]; //zet de variable gelijk aan het huidige veld
   }
   //hij was wel gelijk, dus slaan we hem over...
   else {
         echo " "; //lege spatie
   }
    echo " | "; // dat streepje
    echo $row["veld2"]; //je tweede veld
} while ($row = .....) ;

[ Voor 7% gewijzigd door Skar op 13-05-2005 11:04 ]

Hardware: MSI B450M Mortar Max | AMD Ryzen 5 3600 | 16 GB RAM | MSI Radeon RX 5700 XT Gaming X


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Stom idd, werkt prima zo. Bedankt

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Euh...waarom zijn dit complete records? Als bepaalde records die hetzelfde zijn niet afgebeeld moeten worden, dan kun je ook gewoon DISTINCT gebruiken hoor. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 23:12
-NMe- schreef op vrijdag 13 mei 2005 @ 11:40:
Euh...waarom zijn dit complete records? Als bepaalde records die hetzelfde zijn niet afgebeeld moeten worden, dan kun je ook gewoon DISTINCT gebruiken hoor. ;)
Het gaat er om dat een deel van die records niet moet worden afgebeeld.

bier | grolsch | lentebok
bier | grolsch | herfstbok

moet worden afgebeeld als:
bier | grolsch | lentebok
                 herfstbok


Dat is althans wat ik uit de TS opmaak. Daarvoor is DISTINCT niet heel nuttig...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Inderdaad een array bouwen met welke waarden je gehad hebt, en desnoods eentje met je vorige waarde en die vergelijken met de huidige.

Je zou ook met een cursor door je resultset heen kunnen lopen (steeds $result->next doen en zo). Ik weet alleen niet zeker of MySQL dit ondersteund (edit, ja dus, zie linkje), en daarnaast blijft de array met values toch handiger.

[ Voor 14% gewijzigd door GX op 13-05-2005 13:48 ]

Pagina: 1