[php] vast aantal rijen, ongeacht aantal resultate

Pagina: 1
Acties:

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 04-09 13:10

gizmo9003

Go For It!

Topicstarter
Ik heb in een database bijvoorbeeld 6 resultaten zitten.
Nu wil ik die over 2 rijtjes weergeven, als volgt:
|--1--|--2--|
|--3--|--4--|
|--5--|--6--|
|-----|-----|
|-----|-----|

dus er moeten altijd 5 rijen zijn, maakt niet uit hoeveel resultaten hij krijgt. (hij krijgt nooit meer dan 10 resultaten).

nu heb ik het volgende stukje code al bedacht, maar het werkt niet. Denk dat het probleem in de FOR loop zit..

het openen van de tabel etc in html staat hier boven, maar is niet nuttig om erbij te zetten lijkt mij.
PHP:
1
<? $query = "SELECT * FROM Sub_Categorys WHERE Top_Id = '$Id'"; $result = mysql_query($query,$db); $aantal = mysql_num_rows($result); $rows = $aantal/2; $rows = round($rows); $add = 5-$rows;   while ($Sub_Categorys = mysql_fetch_row($result))      {       IF ($X=="") {       echo "<tr>";       }          echo "<td width='235'><a href='cat_display.php?Cmd=Sub&amp;Id=$Sub_Categorys[1]'>$Sub_Categorys[2]</a></td>";         $X++;       IF ($X=="2") {       echo "</tr>";       $X="";        }         } for ($add>0; $add=$add-1) { echo "<tr><td></td><td></td></tr>"; } echo "</table></center>"; }?>

zal even toelichten:
het aantal rijen dat hij zelf al vormt, is het aantal resultaten/2.
bij 3 resultaten vormt hij 2 rijen, dus moet naar boven afgerond worden.
aantal rijen dat er dus nog leeg bij moeten komen is 5 min het aantal rijen dat via resultaten wordt geleverd.

weten jullie hoe ik dit stukje code wel goed werkend kan krijgen?

tjah..


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

is deze aanpak niet makkelijker?
code:
1
2
3
4
5
6
7
for 0 to 10 {
  if (record = getRecordFromResult())
    write record
  else
    write lege_cel

}

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 04-09 13:10

gizmo9003

Go For It!

Topicstarter
hey.. waarom ben ik daar nie eerder opgekomen.. zoals ik het zie zou het moeten werken...
bedankt man!

edit:

eerder

tjah..


Verwijderd

TIP:

Zet eerst X op 0 voordat je de while in gaat: $X = 0;
Vervang $X == "" door $X == 0,
$X=="2" door $X == 2 en
$X="" door $X = 0;

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 04-09 13:10

gizmo9003

Go For It!

Topicstarter
ow.. wat is daar de reden van dan?
is er verschil tussen x="" en x=0; ??
als hij het als een integer herkent, koppelt hij er toch automatisch de waarde 0 aan als hij leeg is, of heb ik dat mis?

tjah..


Verwijderd

Het is in ieder geval een stuk netter

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 04-09 13:10

gizmo9003

Go For It!

Topicstarter
om even terug te komen op je code:
code:
1
2
3
4
5
6
for 0 to 10 {
  if (record = getRecordFromResult())
    write record
  else
    write lege_cel
}

wat bedoel je nu met getRecordFromResult()
want daarvoor is toch geen functie in php?

want de query moet al eerder uitevoerd worden dan die for lus.. anders wordt de query ook 10x uitgevoerd, en dat moet niet.

Maar als de query van te voren is uitgevoerd, hoe kan ik dan de 10 opeenvolgende resultaten eruit halen? want dat is nu juist het probleem..

tjah..


Verwijderd

Je kunt ook een SQL commando gebruiken om een bepaald aantal rijen op te halen:

Dus ipv
SELECT * FROM Sub_Categorys WHERE Top_Id = '$Id'
Geef je als query
SELECT TOP 10 * FROM Sub_Categorys WHERE Top_Id = '$Id'
En SQL haalt alleen de eerste tien rijen op (zorg dus wel dat je resultaten goed gesorteerd zijn)

Kijk ook hier voor meer info.

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 04-09 13:10

gizmo9003

Go For It!

Topicstarter
dat is het ook niet..
het aantal resultaten dat er in de database zit kan varieren..
en dan nog, dat is hetzelfde als er limit 0,10 bij zetten, dan krijg je ook maximaal 10 resultaten.

Maar ze verdelen over 2 rijtjes, daar zit mijn probleem, dat krijg ik niet voor mekaar, ook niet met bovengenoemde voorbeelden.

tjah..


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Op zondag 30 juni 2002 18:32 schreef gizmo9003 het volgende:
om even terug te komen op je code:
code:
1
2
3
4
5
6
for 0 to 10 {
  if (record = getRecordFromResult())
    write record
  else
    write lege_cel
}

wat bedoel je nu met getRecordFromResult()
want daarvoor is toch geen functie in php?
wat je op die regel doe, is te vergelijken met wat jij hier doet:
PHP:
1
<?while ($Sub_Categorys = mysql_fetch_row($result)) ?>

Je kent een row uit je resultset ($result) toe aan een variabele (in dit geval $Sub_Categorys). Wanneer er geen row meer 'beschikbaar' is, dan zal $Sub_Categorys = mysql_fetch_row($result) de waarde FALSE krijgen, waardoor er due niet wordt voldaan aan de voorwaarde. In dit geval zal er uit de while-lus gesprongen worden (in het nieuwe geval van hierboven, zal er naar de else gesprongen worden.
want de query moet al eerder uitevoerd worden dan die for lus.. anders wordt de query ook 10x uitgevoerd, en dat moet niet.

Maar als de query van te voren is uitgevoerd, hoe kan ik dan de 10 opeenvolgende resultaten eruit halen? want dat is nu juist het probleem..
Dat is je volgende probleem. Dit is vrij simpel op te lossen. Ik zal je de goede richting in helpen :) Wanneer de teller-waarde van je for-lus even is, dan heb je te maken met je linkse item van je tabel en anders met je rechtse (ervanuitgaande dat je bij 0 begint te tellen)

Succes! :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."

Pagina: 1