[php / mysql] variabele counter in while loop

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • murphsy
  • Registratie: Januari 2009
  • Laatst online: 16-09 12:45

murphsy

Product Monkey

Topicstarter
Ik ben al tijden flink aan het bouwen aan mijn eigen prijsvergelijker script op een van mijn hobby websites. De website laadt een aantal shopfeeds in, schoont deze op, doet wat calculaties en plempt ze in een mysql database. Op de website laadt ik vervolgens via een query de prijzen van een bepaald product uit. Deze sorteer ik op basis van de kolom 'total'. Ik laat 15 resultaten zien + 3 premium resultaten.

So far, so good.

Nu wil het nog wel eens voorkomen dat 1 aanbieder alle 18 plekken pakt omdat hij bij total er het beste uitkomt. Om te voorkomen dat de resultaten te eentonig worden wil ik het liefste maximaal 3 maal dezelfde aanbieder vertonen.

Een simpele counter die bijhoudt hoe vaak een aanbieder als langs is gekomen lukt me nog wel door middel van een if statement. Maar hoe krijg ik de while loop zo ver dat hij zodra 'if ( aanbieder1 > 3 )' enkel deze aanbieder skipt maar niet de hele loop afbreekt?

Versimpelt is de code ongeveer zo opgebouwd:

code:
1
2
3
4
5
while ( $product = mysqli_fetch_assoc($ophalen_data) ) 
     {
          extract($product);
              echo "$aanbieder $brand $model $price";
         }


Ik wil zoiets:

code:
1
2
3
4
5
6
7
8
while ( $product = mysqli_fetch_assoc($ophalen_data) ) 
     {
          extract($product);
              
              if ( $aanbieder1counter > 3 OR $aanbieder2counter > 3 OR $aanbieder3counter > 3 )
              // SKIP ALLE AANBIEDER# RESULTS
              echo "$aanbieder $brand $model $price";
         }


Waardoor je dus krijgt:

[aanbieder1]
[aanbieder1]
[aanbieder1]
[aanbieder2]
[aanbieder2]
[aanbieder2]
[aanbieder3]
[aanbieder3]
[aanbieder3]

In plaats van wat hij nu doet, namelijk:

[aanbieder1]
[aanbieder1]
[aanbieder1]
[aanbieder1]
[aanbieder1]
[aanbieder1]
[aanbieder1]
[aanbieder1]
[aanbieder1]

Heeft iemand een suggestie hoe ik dit het beste zou kunnen aanvliegen?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Probeer je probleem eens in pseudo-code op te lossen; a.k.a.: hoe zou je 't zelf doen als je op papier een lijst had (je query results) en daar met een pen van boven-naar-beneden langs ging?

Je moet eerst voor jezelf duidelijk hebben wat je nu precies moet (gaan) doen; ik zal nog wat hinten: je hebt een 'previous_aanbieder' nodig naast je teller; of, als je resultaten niet op aanbieder gesorteerd zijn, een hashmap (ook wel associative array in PHP) met key = aanbieder_id, value = teller.

[ Voor 45% gewijzigd door RobIII op 09-03-2012 12:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij