php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.09.2010, 12:04  
Neuer Benutzer
 
Registriert seit: 24.08.2010
Beiträge: 21
PHP-Kenntnisse:
Anfänger
HiddenX befindet sich auf einem aufstrebenden Ast
Standard Tabelle ausgeben

Hallo allerseits,

ich hatte hier (Optimierung einer Abfrage) schon einen Threat aufgemacht, wie ich eine DB schneller machen kann, weil das Skript immer sehr lange lief.

Hier habe ich gelernt, dass ich zumindest mal zwei Tabellen mittels JOIN zu einer Tabelle zusammen fassen kann.

Zwar geht die Abfrage jetzt viel schneller, ich beisse mir aber die Zähne daran aus das Ergebnis der Abfrage auszugeben.

Die Felder in der DB, die ich ausgeben will, sehen so aus:

jahr|filialnr|filiale|summe1|summe2

Die Tabelle, in der ich das ausgeben will sieht so aus:
-----------|----- 2007------|------2008 -----|------2009----- |------2010-----|
filialnr|filiale|summe1|summe2|summe1|summe2|summe 1|summe2|summe1|summe2

Vor der Tabellen-Optimierung bin ich in zwei Schleifen alle Jahre alle Märkte durchgegangen, weil Filialen und Inventur-Ergebnisse in zwei verschiedenen Tabellen gespeichert sind.

Jetzt habe ich ja durch den JOIN quasi alle Daten in einer DB-Tabelle, aber ich schaffe es nicht diese Daten in einer HTML-Tabelle auszugeben.

Nochmal kurz die Aufgabenstellung:
Es geht um die Auswertung der Inventuren von 4 Jahren von jeweils ca.100 Filialen. Dadurch, dass jedes Jahr neue Filialen dazukommen, sind nicht bei allen Jahren Inventurergebnisse von jeder Filiale gespeichert.
Die DB-Tabelle hat also keine feste Struktur.

Hat jemand eine Idee, wie ich mit nur einer Schleife, die alle Filialen ausliest auch die Jahre zu befüllen?

Gruß
HiddenX
HiddenX ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.09.2010, 12:26  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 3.891
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Mensch
Standard

Das ist eine Form des Gruppenbruch-Verfahrens. Du kannst dir die Arbeit erleichtern, wenn du die Daten vorher in ein geeigneteres Format überführst (d.h. aus deiner "flachen" eine "tiefe" Struktur erzeugst).

Wie liegen die Daten denn vor, wenn sie frisch aus der DB kommen?


Übrigens, es heisst "Thread" (Diskussionsfaden) nicht "Threat" (Bedrohung)
Zitat:
Zitat von HiddenX Beitrag anzeigen
ich hatte hier (Optimierung einer Abfrage) schon einen Threat aufgemacht
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 06.09.2010, 14:17  
Neuer Benutzer
 
Registriert seit: 24.08.2010
Beiträge: 21
PHP-Kenntnisse:
Anfänger
HiddenX befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Nachhilfestunde in Englisch, du hast natürlich Recht!

Ein Auszug aus der Datenbank könnte so aussehen:

jahr--nr-filiale-summe1-summe2
2007 01 xxx - 10.000 --4
2007 02 yyy - 11.000 --1
2007 03 zzz - 12.000 --3
2008 01 xxx - 11.000 -- 1
2008 02 yyy - 12.000 --3
2009 01 xxx - 10.000 --2
2009 02 yyy - 11.000 --3
2010 03 zzz - 9.000 ---4
leer - 04 uuu - leer ---- leer
leer - 05 vvv - leer ---- leer

Es gibt keine Struktur, wie ich vorhin schon sagte, also keinen festen Abstand zwischen den Jahren (dass man sagen könnte 4 Datensätze füllen immer eine Zeile der Tabelle, dann kommt die nächste Zeile).
Ganz blöd ist, wie in den zwei letzten Datensätzen angedeutet, wenn durch den JOIN ein Großteil der Felder leer ist. Das betrifft die Filialen, die noch keine Inventur hatten, oder für die schlicht noch keine Daten eingelesen wurden.
Trotzdem muss logischwerweise die Zeile immer komplett gefüllt werden, wenn keine Daten da sind halt mit einem Strich oder einer Null.

Ich stehe völlig auf dem Schlauch!
HiddenX ist offline  
Alt 06.09.2010, 14:26  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von HiddenX Beitrag anzeigen
Es gibt keine Struktur, wie ich vorhin schon sagte, also keinen festen Abstand zwischen den Jahren (dass man sagen könnte 4 Datensätze füllen immer eine Zeile der Tabelle, dann kommt die nächste Zeile).
Dann überführst du die ausgelesenen Daten am besten erst mal in ein Array, mit folgendem Aufbau: $daten[filiale][jahr] = ...

Beim erzeugen deiner Ausgabe kannst du dieses Array dann in seiner ersten Ebene durchlaufen - dabei erzeugst du für jede Filiale eine Tabellenzeile.
Dabei schaust du dann nach, ob es auf der zweiten Ebene für das jeweilige Jahr einen Eintrag gibt - wenn ja, gibst du die Daten aus, sonst halt nichts oder - oder sonstwas.

Zitat:
Trotzdem muss logischwerweise die Zeile immer komplett gefüllt werden, wenn keine Daten da sind halt mit einem Strich oder einer Null.
Also bitte - das bei der Ausgabe abzufragen und entsprechend zu reagieren sollte aber für jemanden, der so eine Aufgabe übernommen hat, nun wirklich kein Problem darstellen (dürfen).
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline  
Alt 06.09.2010, 16:00  
Neuer Benutzer
 
Registriert seit: 24.08.2010
Beiträge: 21
PHP-Kenntnisse:
Anfänger
HiddenX befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ChrisB Beitrag anzeigen
Dann überführst du die ausgelesenen Daten am besten erst mal in ein Array, mit folgendem Aufbau: $daten[filiale][jahr] = ...
Das hört sich sehr gut an.
Aber ist es wirklich einfacher das Array erst zu befüllen und dann wieder auszulesen, als die Tabelle mehrfach auszulesen?
Weil an der Struktur würde sich ja nicht ändern, oder? Die Daten lägen jetzt halt nur im Array statt in der Tabelle, oder habe ich das missverstanden?
Oder ist es eine Sache der Performance, weil im einen Fall die DB über's Netz ausgelesen wird, im anderen Fall das Array aus dem Speicher?

Zitat:
Zitat von ChrisB Beitrag anzeigen
Also bitte - das bei der Ausgabe abzufragen und entsprechend zu reagieren sollte aber für jemanden, der so eine Aufgabe übernommen hat, nun wirklich kein Problem darstellen (dürfen).
Stimmt. Wäre es mein Job solche Datenbanken aufzubauen und solche Abfragen zu programmieren, wäre ich völlig fehl am Platz
Ich mache das quasi "nebenher" und zum Großteil in meiner Freizeit, weil es mich selbst weiterbringt. Zum einen eben in der Programmierung und zum anderen weil ich damit eine Auswertung machen kann, die genauer ist als die, die ich "geliefert" bekomme.
HiddenX ist offline  
Alt 06.09.2010, 16:23  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 3.891
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Mensch
Standard

Zitat:
Zitat von HiddenX Beitrag anzeigen
Das hört sich sehr gut an.
Aber ist es wirklich einfacher das Array erst zu befüllen und dann wieder auszulesen, als die Tabelle mehrfach auszulesen?
Weil an der Struktur würde sich ja nicht ändern, oder? Die Daten lägen jetzt halt nur im Array statt in der Tabelle, oder habe ich das missverstanden?
Oder ist es eine Sache der Performance, weil im einen Fall die DB über's Netz ausgelesen wird, im anderen Fall das Array aus dem Speicher?
Ja.

Ja, die Daten liegen dann in einem Array

Ja!

Geschwindigkeit: RAM > Festplatte > Kabel (LAN)
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 07.09.2010, 11:33  
Neuer Benutzer
 
Registriert seit: 24.08.2010
Beiträge: 21
PHP-Kenntnisse:
Anfänger
HiddenX befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ChrisB Beitrag anzeigen
Dann überführst du die ausgelesenen Daten am besten erst mal in ein Array, mit folgendem Aufbau: $daten[filiale][jahr] = ...
Ok, ich denke soweit habe ich das verstanden.

Jetzt habe ich natürlich nicht nur einen, sondern zwei Werte, die ich abspeichern muss.

Ich dachte, ich speichere einfach beide Werte getrennt mit Semikolon und pfücke das nachher bei der Ausgabe wieder auseinander.

Also:
PHP-Code:
$db_array[fil_nr][jahr] = $wert_diff.';'.$menge_diff
Wäre der Ansatz OK, oder mache ich das wieder zu umständlich?
HiddenX ist offline  
Alt 07.09.2010, 11:35  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.627
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Zitat:
...oder mache ich das wieder zu umständlich?
Ja. Wenn Du schon eine Datenbank verwendest, solltest Du die Werte auch separat abspeichern!

Wolf29
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline  
Alt 07.09.2010, 12:26  
Neuer Benutzer
 
Registriert seit: 24.08.2010
Beiträge: 21
PHP-Kenntnisse:
Anfänger
HiddenX befindet sich auf einem aufstrebenden Ast
Standard

Also mehrere Arrays?

PHP-Code:
$wdiff[fil_nr][jahr] = $wert_diff.;  
$mdiff[fil_nr][jahr] = $menge_diff
HiddenX ist offline  
Alt 07.09.2010, 13:29  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von HiddenX Beitrag anzeigen
Also mehrere Arrays?

PHP-Code:
$wdiff[fil_nr][jahr] = $wert_diff.;  
$mdiff[fil_nr][jahr] = $menge_diff
Mit dem Code würdest du dir in der zweiten Zeile den in der ersten gemachten Eintrag wieder überschreiben ... wenn dir selbst das nicht klar ist, dann wird's wirklich Zeit, dass du erst mal Grundlagen lernst.

Zitat:
Jetzt habe ich natürlich nicht nur einen, sondern zwei Werte, die ich abspeichern muss.
Du weißt doch inzwischen, dass es Arrays gibt - also nutze sie, auch an solchen Stellen.
PHP-Code:
$data['Filiale4711'][2012] = array($wert1$wert2, ...); 
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mySQL Tabelle ausgeben und Tabellendarstellung je nach Inhalt anpassen Hoffi PHP Tipps 2010 10 26.07.2010 23:00
MSSQL Tabelle mit Array ausgeben da-unknown Datenbanken 3 21.03.2010 04:04
Zahlen mit Hilfe einer Tabelle ausgeben Infoschueler PHP Tipps 2010 8 17.03.2010 23:00
Bestehende php /Myqsl Tabelle Neben einander aus geben Totti-Totti PHP Tipps 2009 3 21.12.2009 11:00
[Erledigt] Einzelne Zeilen aus SQL Tabelle mittels Hyperlink ausgeben mainconcept PHP Tipps 2009 3 26.11.2009 14:15
Daten aus Tabelle durch Formular ausgeben dypor PHP Tipps 2009 9 21.11.2009 09:23
Ein einzelnes Attribut nur einmal in Tabelle ausgeben jimbo PHP Tipps 2009 5 01.11.2009 00:20
[Erledigt] Array in Tabelle als Schleife ausgeben? princemichi Datenbanken 2 16.06.2009 21:24
Tabelle / SQL-Inhalte als PDF ausgeben madeoutofdreams PHP Tipps 2009 1 05.05.2009 10:13
Bei Suche in Tabelle nur Felder ausgeben die das Suchwort beinhalten MichaelB Datenbanken 6 01.03.2009 23:38
Spalteninhalt in Tabelle ausgeben markbraue PHP Tipps 2008 4 10.06.2008 14:28
werte aus tabelle nebeneinander ausgeben Schiedsrichter PHP Tipps 2008 2 15.02.2008 10:20
[Erledigt] [Problem] Datenbank in Tabelle ausgeben PHP Tipps 2006 2 11.01.2006 16:41
[Erledigt] Ganze Tabelle ausgeben PHP Tipps 2004-2 1 21.11.2004 16:48
MySQL select in einer Tabelle ausgeben PHP Tipps 2004 2 11.09.2004 18:22

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php tabelle ausgeben, php alle spalten einer tabelle ausgeben, php alle felder einer tabelle ausgeben, tabelle in php ausgeben, tabelle ausgeben php, http://www.php.de/php-einsteiger/71510-tabelle-ausgeben.html, formulardaten in html-tabelle ausgeben, tabelle php ausgeben, tabelle mit php ausgeben, alle inhalte einer tabelle ausgeben php, datenbank mit php auslesen und als tabelle ausgeben, array in tabelle ausgeben php, php link in tabelle ausgeben, alle spalten einer tabelle ausgeben php, gruppenbruch auf englisch, php schleife tabelle ausgeben, komplette tabelle ausgeben php, php tabelle ausgeben for, datenbank daten aus array in tabelle ausgeben, html tabelle in php ausgeben

Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum