Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP/SQL] verticale tabel

Pagina: 1
Acties:
  • 448 views

  • Dutchmania
  • Registratie: November 2008
  • Laatst online: 22:49
Beste Tweakers,

Ik ben op zoek naar een methode om een tabel op te bouwen met gegevens uit een MySQL database, nu is dat normaal geen probleem als met de indeling van de volgende tabel heeft:
header1header2header3
waarde1.1waarde2.1waarde3.1
waarde1.2waarde2.2waarde3.2


Deze indeling is makkelijk te realiseren met de volgende code:
PHP:
1
2
3
4
5
6
echo "<table><tr><th>header1</th><th>header2</th><.tr>";
$result = mysql_query("SELECT ... FROM ... enz");
while($row = mysql_fetch_object($result)) {
echo "<tr><td>$row->waarde1</td><td>$row->waarde2</td></tr>"
}
echo "</table>";


De tabel die ik wil gebruiken heeft een ietwat andere indeling zodat de while loop met mysql_fetch_object niet werkt, de indeling van mijn tabel is:
header1waarde1.1waarde1.2
header2waarde2.1waarde2.2
headerwaarde3.1waarde3.2


Waar ik tegen aan loop is dat als je een mysql_fetch doet haal je alle waarden uit de variabele waardoor je deze later niet meer kunt gebruiken in andere velden.
Dit is op te lossen door meerdere keren een query aan te roepen maar het moet makkelijker kunnen door middel van 1 query.

Ik heb natuurlijk op google gezocht maar bij omdat deze niet de verwachte resultaten weer geeft (kan ook aan mijn zoekopdracht liggen) heb ik dit topic geopend.

Wie kan mij een zetje in de goed richting geven ?

[ Voor 25% gewijzigd door Dutchmania op 18-06-2010 11:57 . Reden: reactie van admin, TS aangepast ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dutchmanic schreef op vrijdag 18 juni 2010 @ 11:38:
Wie kan mij een zetje in de goed richting geven ?
Heb je zelf al iets geprobeerd? Zo ja, wat dan? Wat werkte er niet? Al eens geprobeerd het in pseudo-code uit te schrijven? Al iets gegoogled? Kortom: waarom mis ik een aantal zaken die in onze Quickstart vermeld staan in dit topic?

Op deze manier is je topic niet veel meer dan een scriptrequest en daar zijn we hier niet zo happig op ;)

[ Voor 17% gewijzigd door RobIII op 18-06-2010 11:42 ]

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


  • mithras
  • Registratie: Maart 2003
  • Niet online
Zoiets heet transponeren. Het transponeren van een 2D array in php is eenvoudig op te zoeken :)

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Die operatie heet een transpose.

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Ik weet niet hoe het heet, maar een oplossing is om het resultaat uit de database eerst tijdelijk op te slaan in een nieuwe array, en daarna door deze array te itereren om alle data tevoorschijn te toveren.

Een voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$headers = new Array();

while($row = haal_rij_uit_je_database())
{
    $titel = $row['title'];
    $waarde = $row['value'];

    //Is deze titel al bekend?
    if(array_key_exists($titel,$headers))
    {
        //Zoja, stop hem in de array van headers.
        //Door de titel als key te gebruiken groepeer je alle waardes bij elkaar.
        $headers[$titel][] = $waarde;
    } else {

        //Deze titel bestaat nog niet, maak een nieuwe array in headers.
        $headers[$titel] = array($waarde);

    }

}

//headers is nu een multidimensionele array van alle waardes bij een titel.

(Niet getest)

Freelance Unity3D developer


  • Dutchmania
  • Registratie: November 2008
  • Laatst online: 22:49
@mithras, HuHu:
Deze functie is inderdaad zeer nuttig, het probleem is dat dit geen 2D array is. Ik moet voor elke rij het commando mysql_fetch_array uitvoeren om zo 1 rij uit de database te halen, deze waard ekomt in $row te staan en kan ik als een 1D array benaderen.

@CyCloneNL:
Ik heb even geprobeerd dit te gebruiken, ik weet alleen niet hoe ik nu een waarde uit die array $headers moet halen.

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Headers is een multidimensionale array, oftewel een array in een array. Je kan de gehele structuur van een variable zien door var_dump, of print_r, zodat je kan zien hoe headers er uit ziet, het enige wat jij nog hoeft te doen is deze data er weer uit te halen.

[ Voor 17% gewijzigd door TJHeuvel op 18-06-2010 15:35 ]

Freelance Unity3D developer


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 18-11 15:23
Dutchmanic schreef op vrijdag 18 juni 2010 @ 15:31:
@mithras, HuHu:
Deze functie is inderdaad zeer nuttig, het probleem is dat dit geen 2D array is. Ik moet voor elke rij het commando mysql_fetch_array uitvoeren om zo 1 rij uit de database te halen, deze waard ekomt in $row te staan en kan ik als een 1D array benaderen.
Waarom? Kun je het niet eerst in een tijdelijke array stoppen, die transponeren en de getransponeerde array dan for-each-en?

Full-stack webdeveloper in Groningen


  • mithras
  • Registratie: Maart 2003
  • Niet online
Dutchmanic schreef op vrijdag 18 juni 2010 @ 15:31:
@mithras, HuHu:
Deze functie is inderdaad zeer nuttig, het probleem is dat dit geen 2D array is. Ik moet voor elke rij het commando mysql_fetch_array uitvoeren om zo 1 rij uit de database te halen, deze waard ekomt in $row te staan en kan ik als een 1D array benaderen.
2D == twee dimensies. 1D == 1 dimensie.

Jij hebt niet één rij van gegevens maar een tabel met een lengte- en breedtemaat. Twee maten, dus twee dimensies ;)

  • Dutchmania
  • Registratie: November 2008
  • Laatst online: 22:49
Het werkt nu inderdaad goed, maar deze functie gebruikt alleen titel en variabele, hoe kan ik deze uitbreiden zodat deze werkt met meer variabelen. In de toepassing die ik maar moeten er 6 waarden aan een titel gekoppeld worden.

@CyCloneNL:
Bedankt voor de 'var_dump' en 'print_r' commando's, die kende ik nog niet, kwamen goed van pas.

@ZanderZ:
Door middel van de commando's van CyCloneNL ben ik er inderdaad achter gekomen dat dit toch wel werkt.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
We zitten hier niet om handjes vast te houden. Ik zie alleen maar "het werkt, maar hoe doe ik nou..." (hier en hier). Probeer het zelf eens. Doe eens wat moeite.

[ Voor 43% gewijzigd door RobIII op 18-06-2010 16:35 ]

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

Pagina: 1

Dit topic is gesloten.