Werte nur bei Übereinstimmung ausgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Werte nur bei Übereinstimmung ausgeben

    Also ich habe folgendes vor. Es gibt eine Mysql-Tabelle. Diese sieht so aus.

    Quellcode

    1. +-----------------------------------------+
    2. | Name | Domains | Traffic | Webspace |
    3. +-----------------------------------------+
    4. | S | | 10 | 25 |
    5. +-----------------------------------------+
    6. | M | 1 | 10 | 45 |
    7. +-----------------------------------------+
    8. | L | 2 | | 85 |
    9. +-----------------------------------------+


    Diese Werte sollen jetzt in vernünftige Form gebracht werden. Es soll im Browser dann so aussehen.

    Quellcode

    1. S M L
    2. ----------------------------------
    3. Domains - 1 2
    4. Traffic 10 10 -
    5. Webspace 25 45 85


    Die Schwierigkeit sehe ich darin, dass ich ja mit foreach oder while die Datenbank durchgehen kann. Bei jeder Übereinstimmung kann man die Tabellenzeile ausgeben lassen. Mein problem ist jetzt, dass er bei jeder Übereintimmung die Tabellenname auch wieder mitschreibt. Also Domains,Webspace und Traffic jedes mal wieder in die Tabelle geschrieben werden. ich möchte aber eigentlich, dass diese Zeilennamen nur einmal erscheinen und auch nur dann, wenn es in der Tabelle überhaupt eine Übereinstimmung gibt (also einen Wert dahinter).

    Es geht mir übrigends nur um die Werte unter den Tabellenstrich. Die Namen (S,M,L) können außen vorbleiben.

    Kann mir da jemand helfen?
  • Ich versuchs mal in Pseudocode. Ich denke du solltest 2 Schleifen haben:

    Quellcode

    1. tarife = []
    2. data = {}
    3. data[domains] = {}
    4. data[traffic] = {}
    5. data[webspace] = {}
    6. while r = SELECT * FROM tarife:
    7. titel = r[name]
    8. tarife[] = titel
    9. data[domains][titel] = r[domains]
    10. data[traffic][titel] = r[traffic]
    11. data[webspace][titel] = r[webspace]
    12. for r in [domains,traffic,webspace]:
    13. print r
    14. for t in tarife:
    15. print data[r][t]
    Alles anzeigen
  • Also ich würde das vielleicht so machen. Vielleicht hilft dir das ja als Denkansatz :)

    Quellcode

    1. <?php
    2. $domains = array ();
    3. $traffic = array ();
    4. $webspace = array ();
    5. $index=0;
    6. $query=mysql_query("SELECT * from tabelle");
    7. while($sql_daten=mysql_fetch_assoc($query))
    8. {
    9. $domains[$index]=$sql_daten['Domains'];
    10. $traffic[$index]=$sql_daten['Traffic'];
    11. $webspace[$index]=$sql_daten['Webspace'];
    12. $index++;
    13. }
    14. ?>
    15. <table width="100%" border="0" cellspacing="0" cellpadding="0">
    16. <tr>
    17. <td width="13%">&nbsp;</td>
    18. <td width="37%">S</td>
    19. <td width="25%">M</td>
    20. <td width="25%">L</td>
    21. </tr>
    22. <tr>
    23. <td>Domains</td>
    24. <?php
    25. for($i=0;$i<$index;i++)
    26. {
    27. echo "<td>".$domains[$i]."</td>\n";
    28. }
    29. ?>
    30. </tr>
    31. <tr>
    32. <td>Traffic</td>
    33. <?php
    34. for($i=0;$i<$index;i++)
    35. {
    36. echo "<td>".$traffic[$i]."</td>\n";
    37. }
    38. ?></tr>
    39. <tr>
    40. <td>Webspace</td>
    41. <?php
    42. for($i=0;$i<$index;i++)
    43. {
    44. echo "<td>".$traffic[$i]."</td>\n";
    45. }
    46. ?></tr>
    47. </table>
    Alles anzeigen


    Ich habe es nicht getestet, aber evtl. klappt das ja so!

    Gruß
    Stephan
  • danke für die antworten.

    das ist schon ein ganz guter tip. aber wie mache ich das denn wenn es keine Werte für Traffic gibt. Dann nämlich soll auch diese Zeile erst gar nicht ausgegeben werden. Die Werte habe ich in der Datenbank mit NULL deklariert.

    Also wenn z. B. alle Daten für Traffik (S,M,L) NULL sind, dann die entsprechende Zeile nicht ausgeben. Das ist ja das schwierige daran.
  • Kann man die While-Schleife noch abkürzen indem man die Tabellenwerte mit foreach prüft und dann für jedes Schlüsselwort einen Array anlegt und dann dem jeweiligen Array den Wert zuweist. Also in etwa so.

    Quellcode

    1. while($sql_daten=mysql_fetch_assoc($query)) {
    2. foreach ($sql_daten as $key => $value) {
    3. $key = array();
    4. $key[$index] = $sql_daten[$key];
    5. }
    6. $index++;
    7. }


    Ich weiß, dass das mit der Variablen $key nicht geht. Aber gibts dafür ne Lösung?
  • Guter Ansatz die Eigenschaften dynamisch zu machen. So ähnlich gehts auch, wie du gepostet hast.

    Quellcode

    1. <?php
    2. $tarife = array();
    3. $data = array();
    4. $query=mysql_query("SELECT * from tabelle; ");
    5. while($sql_daten=mysql_fetch_assoc($query)) {
    6. $eigenschaft = $sql_daten['name'];
    7. $tarife[] = $eigenschaft;
    8. foeach($sql_daten as $key => $value) {
    9. $data[$key][$eigenschaft] = $value;
    10. //$data['traffic']['TarifS'] = '50 GB';
    11. }
    12. }
    13. // Ueberschriften
    14. print '<table>';
    15. print '<tr>';
    16. foeach($tarife as $tarifname) {
    17. printf('<th>%s</th>', $tarifname);
    18. }
    19. print '</tr>';
    20. // Werte
    21. foreach($data as $eigenschaft => $tarif) {
    22. print '<tr>';
    23. printf('<th>%s</th>', $eigenschaft); //linke Spalte = Eigenschaft
    24. foreach($tarif as $wert) // weitere Spalte = Werte der Tarife
    25. printf('<td>'.$wert.'</td>', $data)
    26. print '</tr>';
    27. }
    28. print '</table>';
    29. ?>
    Alles anzeigen