[php] Mysql resultaten in tabel verdelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik zit met het volgende:

Ik heb in een tabel een aantal regio's van ons bedrijf met daarin locaties. Die regio's vraag ik met een DISTINCT query op en haal vervolgens daarbij alle locaties op.

Nu wil ik per regio een tabel hebben waarvan ik het aantal rijen en kolommen kan instellen. Ik weet wel dat je normaal met een LIMIT query de resultaten per pagina kan uitsmeren alleen nu wil ik ze dus verdelen over een tabel en dat met alle regio op een pagina.

Heeft iemand hier ervaring mee? Heb zelf al verschillende dingen geprobeerd en opgezocht, maar de meeste howto's gaan uit van een pagina refresh om vervolgens te kijken hoeveel results er opgevraagd zijn om vervolgens meer op te halen.

Acties:
  • 0 Henk 'm!

Verwijderd

"doe even... " posts, post eens je table structuur en de queries die je al gemaakt hebt.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Dus je wil in één keer een htmltabel met regio's als parentId en per regio een n-aantal lokaties op je scherm tonen?

Ik gok dat je op zoek bent naar een recursieve manier van werken.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Verwijderd schreef op donderdag 10 april 2008 @ 10:00:
"doe even... " posts, post eens je table structuur en de queries die je al gemaakt hebt.
"doe even" ? ik wil helemaal niet dat je het doet. Ik wil weten hoe het werkt.

Ik heb dit soort dingen nog nooit gemaakt en je komt op internet alleen uit op het spreiden van results over meerdere pagina met back en forward links.

Mijn table is niet zo heel spannend:

code:
1
ID  REGIO  LOCATIE


Ik heb alle query's etc al, ik weet alleen niet hoe je deze manier van resultaten presenteren moet aanpakken.

Ik doe een distinct query om de regio's eruit te halen en vervolgens doe ik daarmee een query naar alle locaties binnen die regio..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$sql_regio = mysql_query("SELECT DISTINCT regio FROM oe");

    while ($result_regio = mysql_fetch_array($sql_regio))
        {
            
            $regio = $result_regio['regio'];


            echo $regio."<br/>";
            echo "<p>";

            $sql_oe = mysql_query("SELECT naam FROM oe WHERE regio = '$regio'");

                while ($result_oe = mysql_fetch_array($sql_oe))
                    {
                        
                        $naam = $result_oe['naam'];
                        echo $naam."<br/>";     

                    }

            echo "</p>";

        }

[ Voor 31% gewijzigd door ViNyL op 10-04-2008 10:10 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je bent bekend met de werking van het where deel in een query? Zo nee, kijk hier dan even naar. Zo ja, dan begrijp ik niet wat je probleem nu eigenlijk is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Hoe bedoel je dat precies?

Stel voor een regio heb ik 20 locaties, deze wil ik netjes verdelen over een tabel met 4 kolommen. Dan moet het er zo uit zien:

HTML:
1
2
3
4
5
6
7
8
<table width="200" border="1">
  <tr>
    <td>5 locaties</td>
    <td>5 locaties</td>
    <td>5 locaties</td>
    <td>5 locaties</td>
  </tr>
</table>


Ik zie niet hoe je dat met het WHERE gedeelte wilt doen...

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Dus... je wil nu weten hoe je dit in een <table> kan gieten?

Overigens kan je er voor opteren dit in een definition list te stoppen.

Maar... als je bij het genereren van je table een counter bijhoudt, vervolgens bij counter==4 starten met een nieuwe table row.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ja dat schiet me ook net te binnen, denk dat ik te moeilijk zit te doen, my brain is cooked. Te lang mobiel gebelt denk ik ofzo...

Ik post mijn results nog even, want ga er denk ik wel uitkomen!

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik reageer op wat ik lees. Wat jij in je reactie tikt is imho met geen mogelijkheid uit je startpost te halen.

Als het probleem puur de weergave is dan zul je dit in je presentation logic op moeten lossen, niet met een query. Sowieso kan je query een stuk beter. Het voorbeeldje dat je hierboven post kun je ook heel simpel in 1 enkele query ophalen. Gewoon sorteren op regio en bijhouden wat de vorige regio was. Is die anders dan het huidige record dan begin je met een nieuwe html tabel.

Het verdelen over de kolommen is verder simpel te doen door een tellertje bij te houden. Gewoon zodra je op 5 zit een nieuwe cel/row beginnen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ben wel benieuwd hoe ik me query kan verbeteren, dus als je me dat zou kunnen vertellen.. graag!

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Dat zegt Janoz toch?
- Sorteren op regio. > met iets als "select naam, regio, locatie from tabel order by regio" zou imo voldoende moeten zijn.
- Sla de current regio op in een variable.
- Loop door je dataset heen en print het af.
- Is de dataset regio != current regio > hoppa, andere locatie > nieuwe row of table.

[ Voor 38% gewijzigd door TeeDee op 10-04-2008 10:47 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Nee, me query zou beter kunnen, dit is afhandeling met overige code lijkt me..

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
1 query is beter dan 1 query plus een query per regio...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

Verwijderd

ViNyL schreef op donderdag 10 april 2008 @ 10:43:
Nee, me query zou beter kunnen, dit is afhandeling met overige code lijkt me..
PHP:
1
2
3
4
5
6
7
8
9
$regio_current = '';
$result = mysql_query("SELECT regio, naam FROM oe ORDER BY regio, naam"); 
while($row = mysql_fetch_array($result)) {
  if($regio_current != $row['regio']) {
    // Nieuwe / andere regio
    $regio_current = $row['regio'];
  }
  echo $row['naam'];
}

Dit bedoelen ze nou hierboven.

[ Voor 32% gewijzigd door Verwijderd op 10-04-2008 11:24 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

ViNyL schreef op donderdag 10 april 2008 @ 10:43:
Nee, me query zou beter kunnen, dit is afhandeling met overige code lijkt me..
Je query en je Nederlands kunnen beter. het is m'n of mijn query. Daarnaast is 1 query met een beetje handigheid bij het uitlezen natuurlijk een stuk efficienter dan eerst een query uitvoeren en vervolgens nog meerdere queries uitvoeren om dezelfde data + een beetje extra weer op te halen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Janoz schreef op donderdag 10 april 2008 @ 11:24:
[...]

Je query en je Nederlands kunnen beter. het is m'n of mijn query. Daarnaast is 1 query met een beetje handigheid bij het uitlezen natuurlijk een stuk efficienter dan eerst een query uitvoeren en vervolgens nog meerdere queries uitvoeren om dezelfde data + een beetje extra weer op te halen.
Don't mind me asking maar... hebben we hier nu ook al taal politie? Wat heeft dit met mijn vraag te maken? :/

@Blackspot: Bedankt voor die query, wist niet dat je dit ook zo kon doen! :*)

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Welja, bedank alleen Blackspot maar. Deze heeft het idee van Janoz in hapklare brokken gegeven.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ow sorry wist niet dat je je daar aan stoorde... :X Ben het gewoon simpelweg vergeten..

Dank Janoz, en volgende keer zal ik op mijn spelling letten ;)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Het gaat er meer om dat met een beetje inzet (max 2 minuten, of een tutorial+5 minuten) je Janoz' stappenplan zelf om had kunnen zetten naar code. ;)

Het is heel aardig dat Blackspot de code al neerzet, maar daar gebeurt gewoon 1 op 1 wat reeds gezegd was, en die code is verre van rocket science.

{signature}

Pagina: 1