[PHP] MySQL query van tabel verticaal printen

Pagina: 1
Acties:
  • 138 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik loop geregeld tegen het probleem aan dat ik een tabel wil printen met een soort van legenda in verticale vorm. Hier komt een stukje HTML bij kijken wat ik altijd in de war schop en volgens mij omdat ik het beste alles kan echo-en voor deze output, wat ik niet doe... ik echo alleen de PHP code en HTML zet ik er hard in, zodat ik nog wat in mijn editor kan zien.

Ik kwam er achter dat phpMyAdmin een optie heeft om een tabel verticaal te printen, en dat wil ik ook graag.

Strandaard zou een tabel er zo uit zien in phpMyAdmin:

naamhoeveelheidprijs
appel105
peer207
kiwi54
banaan63


phpMyAdmin kan dit ook verticaal dat voor een vergelijking van items echt velen malen makkelijker leest:

naamappelpeerkiwibanaan
hoeveelheid102056
prijs5743


Ik kom alleen met het laatste voorbeeld altijd in de clinch te liggen.

Ik weet hoe ik regels en kolommen kan printen door deze af te sluyiten en opnieuw te beginnen, maar wanneer ik er handmatig per regel, omdat ik toch weet wat ik wil printen, een omschrijving voor wil geven, zoals hier naam, hoeveelheid en prijs gaat het mis.

Dus laten we er vanuit gaan dat "naam", "hoeveelheid" en "prijs" de namen zijn van de kolommen in de database en ik deze wil noemen:

Name
Quantity
Price

Zou ik een tabel willen maken waar ik dit handmatig in vul in de eerste kolom en hierna de rest ga printen in 4 kolommen er naast (zoals de 2e layout) van wat ik uit de database haal.

Hoe ik het ook wenk of keer, dit lijkt me praktisch niet mogelijk en toch ook weer wel.

Ik ben al zo lang aan het testen en rommelen dat ik het gewoon even niet meer zie hoe ik dit nu wil/zal gaan doen.

Eigenlijk heeft een database nameluijk op die manier weinig zin en kan ik het net zo goed in de HTML zetten, toch wil ik iets flexibeler met mijn data omgaan en dus zelf bepalen wat ik in iedere kolom print.

Ik heb er over zitten denken om meerdere kolommen aan te maken zoals eerder eens in een topic van mij is aangedragen, dit wil ik in dit geval gewoon niet.

Query draaien en uitpoepen wat ik wil is het idee. Simpel en doeltreffend zou je zeggen 8)7

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 20:33
Dat is redelijk eenvoudig voor een van te voren bepaalde hoogte (rijaantal)

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
25
26
27
$tableRow1 = array('Regel 1');
$tableRow2 = array('Regel 2');
$tableRow3 = array('Regel 3')

while($row = mysql_fetch_row($result))
{
    $tableRow1 [] = $row['return_value_1'];
    $tableRow2 [] = $row['return_value_2'];
    $tableRow3 [] = $row['return_value_2'];

}

echo '<table><tr>';

foreach($tableRow1 as $rowVal) echo '<td>'.$rowVal.'</td>';

echo '</tr><tr>';

foreach($tableRow2 as $rowVal) echo '<td>'.$rowVal.'</td>';

echo '</tr><tr>';

foreach($tableRow3 as $rowVal) echo '<td>'.$rowVal.'</td>';

echo '</tr>';

echo '</table>';


Dit kan veel netter natuurlijk, je kunt de rijen weer in een array gooien en zodoende een foreach in een foreach nesten en de rijen en cellen dynamisch opbouwen, maar je voor het idee zal dit wel verhelderen.

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • jpwaag
  • Registratie: September 2003
  • Laatst online: 16:05
Je hebt een array met gegevens, die je 90 graden gedraaid wilt weergeven (niet helemaal, 90 graden draaien en spiegelen eigenlijk). Zo moeilijk zou het natuurlijk niet moeten zijn, zeker niet als je deze stappen los gaat doen, wat waarschijnlijk niet zo efficient gaat worden. Daarom maar een beetje pielen met array's

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
25
26
27
28
29
30
<?php

//uit je db trekken
$sFruits="SELECT Name, Quantity Price FROM Fruits ORDER BY Name;";
$rFruits=mysql_query($sFruits);
//er een array van maken
while($aFruit=mysql_fetch_assoc($rFruits)){
    $aFruits[]=$aFruit;
}

//tabellabetjes koppelen aan sqldingen
$rowLabels=array('Name' => 'naam', 'Quantity' => 'hoeveelheid', 'Price' => 'prijs');

//aantal fruitjes tellen, kan natuurlijk ook uit de sql-resultset gehaald worden
$numberOfCols=count($aFruits);

//Tabel maken
echo '<table>';
foreach($rowLabels as $rowKey => $rowLabel){
    //kolomtiteltje
    echo '<tr><td>'.$rowLabel.'</td>';
    //nu de data nog
    for($iKolom=0; $iKolom<$numberOfCols; $iKolom++){
        echo '<td>'.$aFruits[$iKolom][$rowKey].'</td>';
    }
    echo '</tr>';
}
echo '</table>';

?>

Even snel getypt, maar volgens mij moet dit wel werken zo...

[ Voor 2% gewijzigd door jpwaag op 05-07-2007 00:31 . Reden: nog even een disclaimertje ]


Acties:
  • 0 Henk 'm!

  • jpwaag
  • Registratie: September 2003
  • Laatst online: 16:05
Ik zit net te denken, hier wordt het niet heel doorzichtig van, beter zou zijn gewoon eerst een array bouwen waar de data correct in staat, en die dan 'normaal', met je template-ketzer weer te geven. Het idee is iig duidelijk, en natuurlijk ook toepasbaar zonder de html er in.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OK, bedankt voor de voorbeelden, ik zocht iets in die richting.

Je moet naar een array toe om 90 graden te draaien toch ?

Ik dacht hier eigenlijk best veel over te vinden via google, maar "vertical printing" is not common used I think ;)

Acties:
  • 0 Henk 'm!

  • Deikke
  • Registratie: Juni 2004
  • Laatst online: 06:44
Dit is ook op te lossen door gewoon div's te gebruiken. Dan kun je per kolom (in het eindresultaat) een lijstje met waarden weergeven (die dan onder elkaar komen).

Wat je ook kan doen is voor elke kolom een array aanmaken, en vervolgens elke kolom horizontaal weergeven.

$data = array('naam' => array('appel', 'peer'), 'hoeveelheid' => '1', '2', etc);

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Verwijderd schreef op donderdag 05 juli 2007 @ 11:35:
OK, bedankt voor de voorbeelden, ik zocht iets in die richting.

Je moet naar een array toe om 90 graden te draaien toch ?

Ik dacht hier eigenlijk best veel over te vinden via google, maar "vertical printing" is not common used I think ;)
dan moet je zoeken op PIVOT tables enzo... maar die heb je helaas niet in MySQL... maar dan heb je iig wat meer informatie over je onderwerp...

maar ik zou het idd niet in de query oplossen, maar gewoon in de php... inderdaad bijv. met een array...

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Deikke schreef op donderdag 05 juli 2007 @ 11:49:
Dit is ook op te lossen door gewoon div's te gebruiken. Dan kun je per kolom (in het eindresultaat) een lijstje met waarden weergeven (die dan onder elkaar komen).

Wat je ook kan doen is voor elke kolom een array aanmaken, en vervolgens elke kolom horizontaal weergeven.

$data = array('naam' => array('appel', 'peer'), 'hoeveelheid' => '1', '2', etc);
Tabulaire data hoort mijns inziens in een tabel, niet in layers (wat een div in feite is),
wil je ook semantisch correct gezien bezig zijn. ;) De eerste rij (waar de kopjes in staan) zou ik dan wel als <th>$val</th> weergeven, de cellen zelf, waar de tabulaire data in komt is dan uiteraard <td>$val</td>... :)

Of ik snap jouw post niet, zou je deze dan kunnen toelichten? :)

[ Voor 11% gewijzigd door CH4OS op 05-07-2007 12:33 ]


Acties:
  • 0 Henk 'm!

  • woest85
  • Registratie: Juli 2003
  • Niet online

woest85

[Ondertitel]

Edwardvb schreef op donderdag 05 juli 2007 @ 12:12:
[...]


dan moet je zoeken op PIVOT tables enzo... maar die heb je helaas niet in MySQL... maar dan heb je iig wat meer informatie over je onderwerp...

maar ik zou het idd niet in de query oplossen, maar gewoon in de php... inderdaad bijv. met een array...
Toevallig vandeweek deze tegengekomen, hier wodt inderdaad vanuit een array een pivottable gemaakt. Misschien dat TS hier wat mee kan?

http://phpfreakz.nl/library.php?sid=24413

[Signature]


Acties:
  • 0 Henk 'm!

  • Deikke
  • Registratie: Juni 2004
  • Laatst online: 06:44
GJ-tje schreef op donderdag 05 juli 2007 @ 12:31:
[...]
Tabulaire data hoort mijns inziens in een tabel, niet in layers (wat een div in feite is),
wil je ook semantisch correct gezien bezig zijn. ;) De eerste rij (waar de kopjes in staan) zou ik dan wel als <th>$val</th> weergeven, de cellen zelf, waar de tabulaire data in komt is dan uiteraard <td>$val</td>... :)

Of ik snap jouw post niet, zou je deze dan kunnen toelichten? :)
Je hebt gelijk over die div's, het was alleen een redelijk simpele oplossing. (maar uiteraard niet DE oplossing :) )

Ik dacht aan zoiets (mijn tweede idee), mischien is dat duidelijker:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$table = array();
while ($row = mysql_fetch_assoc($result))
{
  foreach ($row as $key => $value) $table[$key][] = $value;
}

foreach($table as $title => $items)
{
  echo '<tr><th>' . $title . '</th>';
  foreach ($items as $item) echo '<td>' . $item . '</td>';
  echo '</tr>'; 
}

[ Voor 9% gewijzigd door Deikke op 05-07-2007 20:52 ]

Pagina: 1