Antworten auf deine Fragen:
Neues Thema erstellen

brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

winne52

Webmaster

Hallo Gemeinde,
ich komme einfach nicht weiter mit dem Auslesen und Anzeigen aus meiner Datenbank!
fogendes Problem möchte ich lösen:

Datenbank: (52 Kalenderwochen)
id datum_von datum_bis preis name
1 31.12.1011 06.01.2012 122.00 Jahreswechsel
2 07.01.1012 13.01.2012 82.00 Winter
3 14.01.1012 20.01.2012 82.00 Winter
4 21.01.1012 27.01.2012 82.00 Winter
5 28.01.1012 03.02.2012 102.00 Winterferien
6 04.02.1012 10.02.2012 102.00 Winterferien
.
.
.
.
52

ausgegeben soll stehen:
von bis Preis Name

31.12.1011 - 06.01.2012 122.00 Jahreswechsel
07.01.1012 - 27.01.2012 82.00 Winter
28.01.1012 - 10.02.2012 102.00 Winterferien
.
.
.
.
also immder wen der preis gleich ist das Datum von bis zusammenfassen

komme immer zur Ausgabe:

31.12.1011 - 06.01.2012 122.00 Jahreswechsel
07.01.1012 - 01.01.1970 82.00 Winter
28.01.1012 - 27.01.2012 102.00 Winterferien
.
mit dem php Script drehe ich mich immer im Kreis

wer kann mir auf die Sprünge helfen?
ich denke man kann man das besser über eine SQL-Abfrage lösen?
aber wie?

ich möchte von - bis zusammenfassen - wenn gleicher Preis ist

danke im Voraus

winne52
 

Robbyn-

PHP / Flex Programmierer

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Das geht meines wissen nicht, du hast im moment der Selektion immer nur eine Zeile im Visier. Du kannst nicht vorher sagen was als nächstes kommt bzw. was zuvor war. Das kannst du nur mit einer PHP Schleife lösen. Jedenfalls meines Wissens nach, vielleicht gibt es ja dafür eine Lösung.
 

Duddle

Posting-Frequenz: 14µHz

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Falls die Datums-Spalten auch als solche deklariert wurden, funktioniert für deine Beispiele
Code:
SELECT MIN(datum_von), MAX(datum_bis), preis, name FROM tab GROUP BY preis;



Duddle
 

Mereel

Aktives Mitglied

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Falls die Datums-Spalten auch als solche deklariert wurden, funktioniert für deine Beispiele
Code:
SELECT MIN(datum_von), MAX(datum_bis), preis, name FROM tab GROUP BY preis;
Duddle

Wenn allerdings Kurzwochen den selben Preis haben, aber nicht direkt aufeinanderfolgen, kommt es mit dieser Abfrage zu einer (vermutlich) ungewollten Ausgabe, da die Wochen, die dazwischen liegen und einen anderen Preis haben, mit in den ausgegebenen Zeitraum einbezogen werden.

Meckern ist zwar leicht, eine andere Lösung habe ich aber auch nicht :D
Aber vielleicht gibt es ja die Möglichkeit, nur aufeinanderfolgende Datensätze zu GROUPen!?
 

Sinane

Puttmacherin

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Eine bescheidene Frage: So wie es aussieht, willst du immer nur aufeinanderfolgende Wochen zusammenfassen. Ich glaube, wenn es so gelöst wird wie Duddle vorgeschlagen hat, dann kann es passieren, dass der Winter plötzlich das ganze Jahr über gehen soll, weil z.B. im Oktober oder so nochmal ne Woche 82.00 kostet, aber trotzdem Sommerwochen dazwischen sind, weil die mehr kosten.
So, jetzt endlich zu meiner eigentlichen Frage: Wieso fasst du die Wochen, die aufeinanderfolgend gleich viel kosten, nicht einfach zu einem Datenbankeintrag zusammen? Also z.B.:

1 31.12.1011 06.01.2012 122.00 Jahreswechsel
2 07.01.1012 27.01.2012 82.00 Winter
3 28.01.1012 10.02.2012 102.00 Winterferien

Dann hast du die gewünschte Ausgabe.
 

Duddle

Posting-Frequenz: 14µHz

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Vereinfacht gesagt gibt es das Konzept "aufeinanderfolgend" in keiner relationalen Datenbank. Die Reihenfolge der Einträge hat keinen Zusammenhang zur Reihenfolge der Eintragung. Es sieht zwar fast immer so aus, aber
Code:
id name
1 a
2 f
3 k
4 m
5 n
ist genau die gleiche Tabelle wie
Code:
id name
1 a
5 n
2 f
3 k
4 m

Falls der Anwendungfall auf "aufeinanderfolgende" Einträge spezialisiert werden muss, funktioniert meine Lösung natürlich nicht. Dann ist das (meiner Meinung nach) aber auch keine Aufgabe mehr für die Datenbank.


Duddle
 

winne52

Webmaster

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Das geht meines wissen nicht, du hast im moment der Selektion immer nur eine Zeile im Visier. Du kannst nicht vorher sagen was als nächstes kommt bzw. was zuvor war. Das kannst du nur mit einer PHP Schleife lösen. Jedenfalls meines Wissens nach, vielleicht gibt es ja dafür eine Lösung.
danke für Deine schnelle Antwort

habe es auch schon mit einer Schleife versucht und erhalte immer nur das datum_bis in der darauffolgenden Ausgabeschleife
 

winne52

Webmaster

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Eine bescheidene Frage: So wie es aussieht, willst du immer nur aufeinanderfolgende Wochen zusammenfassen. Ich glaube, wenn es so gelöst wird wie Duddle vorgeschlagen hat, dann kann es passieren, dass der Winter plötzlich das ganze Jahr über gehen soll, weil z.B. im Oktober oder so nochmal ne Woche 82.00 kostet, aber trotzdem Sommerwochen dazwischen sind, weil die mehr kosten.
So, jetzt endlich zu meiner eigentlichen Frage: Wieso fasst du die Wochen, die aufeinanderfolgend gleich viel kosten, nicht einfach zu einem Datenbankeintrag zusammen? Also z.B.:

1 31.12.1011 06.01.2012 122.00 Jahreswechsel
2 07.01.1012 27.01.2012 82.00 Winter
3 28.01.1012 10.02.2012 102.00 Winterferien

Dann hast du die gewünschte Ausgabe.

danke für Deine schnelle Antwort
eine denkbare Lösung wenn ich nicht jede Kalenderwoche in der Datenbank anlegen müsste um flexiebel die Preise immer wochenweise anzupassen.
Hatte früher Zeiten von bis und wenn ich mal eine Woche in dieser Zeit preislich ändern muss, dann muss auch die zeit von bis zerlegt werden.
d.h. ers werden 3 von bis Zeiten draus. Passiert das öfters und bei den Objekten unterschiedlich wird es mit der Zeit unübersichtlich und nicht so flexiebel wie mit den angedachten Kalenderwochen. Wollte nur nicht alle 52 Kalenderwochen anzeigen, wenn doch einige Wochen den gleichen Preis haben.
 

winne52

Webmaster

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Wenn allerdings Kurzwochen den selben Preis haben, aber nicht direkt aufeinanderfolgen, kommt es mit dieser Abfrage zu einer (vermutlich) ungewollten Ausgabe, da die Wochen, die dazwischen liegen und einen anderen Preis haben, mit in den ausgegebenen Zeitraum einbezogen werden.

Meckern ist zwar leicht, eine andere Lösung habe ich aber auch nicht :D
Aber vielleicht gibt es ja die Möglichkeit, nur aufeinanderfolgende Datensätze zu GROUPen!?

danke für Deine schnelle Antwort
habe ich auch schon versucht und komme mit gleichen Preisen in anderen Kalenderwochen die nicht zusammenhängen zu den genannten ungewollten Ausgaben.
 

Schnoobby

Nicht mehr ganz neu hier

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Das von dir gewünschte ist mit deiner Datenbankstruktur imho nur über eine Schleife möglich, was mit das einfachste wäre. Ein "aufeinanderfolgen" gibt es in einer relationalen Datenbank nur wenn du noch ein zusätzliches Feld einführst in welchem auf die Id des Nachfolgers verwiesen wird. Dann könntest du die Tabelle auf sich selbst joinen und dir den Nachfolger ausgeben lassen.
Allerdings ist die Variante mit der Schleife meiner Meinung nach wesentlich einfacher. Bei der vorherigen Datenbankabfrage natürlich noch nach VON sortieren.
 

winne52

Webmaster

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Das von dir gewünschte ist mit deiner Datenbankstruktur imho nur über eine Schleife möglich, was mit das einfachste wäre. Ein "aufeinanderfolgen" gibt es in einer relationalen Datenbank nur wenn du noch ein zusätzliches Feld einführst in welchem auf die Id des Nachfolgers verwiesen wird. Dann könntest du die Tabelle auf sich selbst joinen und dir den Nachfolger ausgeben lassen.
Allerdings ist die Variante mit der Schleife meiner Meinung nach wesentlich einfacher. Bei der vorherigen Datenbankabfrage natürlich noch nach VON sortieren.

danke für Deine Antwort

habe irgendwo einen Denkfehler
hier meim Schleifenversuch
PHP:
$gleich == '0'
 //fuer den ersten aufruf
else {
////////////////////////////////////////// 
///anzeigen der Kalenderwochen wenn aktiv(1)
//////////////////////////////////////////
 if ($ka_wo == '1') {
 
  if ($gleich == '0') {
   $pro_tag_alt = $pro_tag;
   $pro_woche = ($pro_tag * 7) + $endreinigung;
   $pro_woche = number_format($pro_woche,2);
 
 echo"
<tr>
<td class=\"in_text_left\">$saison_name</td>
<td class=\"in_text_left\">".date("d.m.Y",$datum_von)." - ".date("d.m.Y",$datum_bis)."</td>
<td class=\"in_text_right\">$pro_woche $eur</td>
"; 
   $gleich = '1';
 
  }
 else {
 
 if ($pro_tag_alt == $pro_tag) {
  $pro_tag_alt = $pro_tag;
  $datum = $datum_bis;
 }
 else {
 $pro_woche = ($pro_tag * 7) + $endreinigung;
 $pro_woche = number_format($pro_woche,2);
 $pro_tag_alt = $pro_tag;
 
 echo"
<tr>
<td class=\"in_text_left\">$saison_name</td>
<td class=\"in_text_left\">".date("d.m.Y",$datum_von)." - ".date("d.m.Y",$datum)."</td>
<td class=\"in_text_right\">$pro_woche $eur</td>
"; 
 
 }
 }
 }
und das das Ergebnis
Preisstaffelung inkl. Endreinigung: pro Woche ab:
Jahreswechsel 31.12.2011 - 06.01.2012 1,044.99 EUR
Winter 07.01.2012 - 01.01.1970 369.00 EUR
Winter 28.01.2012 - 27.01.2012 365.99 EUR
Winter 25.02.2012 - 24.02.2012 369.00 EUR
Ostern 31.03.2012 - 30.03.2012 656.00 EUR
Zwischensaison 14.04.2012 - 13.04.2012 665.03 EUR
Zwischensaison 19.05.2012 - 18.05.2012 789.00 EUR
Vorsaison 02.06.2012 - 01.06.2012 810.00 EUR
Hauptsaison 30.06.2012 - 29.06.2012 1,055.00 EUR
Zwischensaison 01.09.2012 - 31.08.2012 789.00 EUR
Zwischensaison 29.09.2012 - 28.09.2012 656.00 EUR
Herbst 03.11.2012 - 02.11.2012 390.00 EUR
Winter 22.12.2012 - 21.12.2012 1,076.00 EUR
Jahreswechsel 29.12.2012 - 21.12.2012 1,044.99 EUR

blau wo ist mein Denkfeher?
ab dem roten bis_datum kommt alles eine Zeile später

und ohne Schleife
Preisstaffelung inkl. Endreinigung: pro Tag ab: zzgl.Endreinigung
Jahreswechsel 31.12.2011 - 06.01.2012 138.57 EUR 75.00 EUR
Winter 07.01.2012 - 13.01.2012 42 EUR 75.00 EUR
Winter 14.01.2012 - 20.01.2012 42 EUR 75.00 EUR
Winter 21.01.2012 - 27.01.2012 42 EUR 75.00 EUR
Winter 28.01.2012 - 03.02.2012 41.57 EUR 75.00 EUR
Winter 04.02.2012 - 10.02.2012 41.57 EUR 75.00 EUR
Winter 11.02.2012 - 17.02.2012 41.57 EUR 75.00 EUR
Winter 18.02.2012 - 24.02.2012 41.57 EUR 75.00 EUR
Winter 25.02.2012 - 02.03.2012 42 EUR 75.00 EUR
Winter 03.03.2012 - 09.03.2012 42 EUR 75.00 EUR
Winter 10.03.2012 - 16.03.2012 42 EUR 75.00 EUR
Winter 17.03.2012 - 23.03.2012 42 EUR 75.00 EUR
Frühling 24.03.2012 - 30.03.2012 42 EUR 75.00 EUR
Ostern 31.03.2012 - 06.04.2012 83 EUR 75.00 EUR
Ostern 07.04.2012 - 13.04.2012 83 EUR 75.00 EUR
u.s.w. bis zur 52 Kalenderwoche
Jahreswechsel 29.12.2012 - 04.01.2013 138.57 EUR 75.00 EUR
 

Mereel

Aktives Mitglied

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Also folgenden Codeteil musst du nochmal überdenken:
PHP:
 if ($pro_tag_alt == $pro_tag) {
  $pro_tag_alt = $pro_tag;
  $datum = $datum_bis;
 }
 else {
 $pro_woche = ($pro_tag * 7) + $endreinigung;
 $pro_woche = number_format($pro_woche,2);
 $pro_tag_alt = $pro_tag;
 
 echo"
<tr>
<td class=\"in_text_left\">$saison_name</td>
<td class=\"in_text_left\">".date("d.m.Y",$datum_von)." - ".date("d.m.Y",$datum)."</td>
<td class=\"in_text_right\">$pro_woche $eur</td>
"; 
 
 }

Ab dem zweiten Datensatz wird überprüft, ob "$pro_tag_alt == $pro_tag", was beim 2. Datensatz schon mal nicht der Fall ist, also wird der else-code ausgeführt. Dort gibst du die variable $datum aus, die aber gar nicht gesetzt wurde (wird ja nur im "if-Teil" gesetzt). Daher erhältst du dein blaues 1.1.1970, was ja dem unix-timestamp "0" entspricht.
Beim nächsten Durchlauf wird dann (wenn es sich wieder um einen anderen Preis handelt) das $datum vom vorherigen Durchlauf ausgegeben (weil ja wieder $datum nicht gesetzt wird).

Ich hoffe das war verständlich so weit :)

Viele Grüße, Mereel
 

winne52

Webmaster

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Also folgenden Codeteil musst du nochmal überdenken:
PHP:
 if ($pro_tag_alt == $pro_tag) {
  $pro_tag_alt = $pro_tag;
  $datum = $datum_bis;
 }
 else {
 $pro_woche = ($pro_tag * 7) + $endreinigung;
 $pro_woche = number_format($pro_woche,2);
 $pro_tag_alt = $pro_tag;
 
 echo"
<tr>
<td class=\"in_text_left\">$saison_name</td>
<td class=\"in_text_left\">".date("d.m.Y",$datum_von)." - ".date("d.m.Y",$datum)."</td>
<td class=\"in_text_right\">$pro_woche $eur</td>
"; 
 
 }

Ab dem zweiten Datensatz wird überprüft, ob "$pro_tag_alt == $pro_tag", was beim 2. Datensatz schon mal nicht der Fall ist, also wird der else-code ausgeführt. Dort gibst du die variable $datum aus, die aber gar nicht gesetzt wurde (wird ja nur im "if-Teil" gesetzt). Daher erhältst du dein blaues 1.1.1970, was ja dem unix-timestamp "0" entspricht.
Beim nächsten Durchlauf wird dann (wenn es sich wieder um einen anderen Preis handelt) das $datum vom vorherigen Durchlauf ausgegeben (weil ja wieder $datum nicht gesetzt wird).

Ich hoffe das war verständlich so weit :)

Viele Grüße, Mereel
danke Mereel

PHP:
 if ($pro_tag_alt == $pro_tag) {
$pro_tag_alt = $pro_tag;
$datum = $datum_bis;
}
else {
$pro_woche = ($pro_tag * 7) + $endreinigung;
$pro_woche = number_format($pro_woche,2);
$pro_tag_alt = $pro_tag;
$datum = $datum_bis; ????

echo"
<tr>
<td class=\"in_text_left\">$saison_name</td>
<td class=\"in_text_left\">".date("d.m.Y",$datum_von)." - ".date("d.m.Y",$datum)."</td>
<td class=\"in_text_right\">$pro_woche $eur</td>
"; 

}

Ausgabe nun
Jahreswechsel 31.12.2011 - 06.01.2012 1,044.99 EUR
Winter 07.01.2012 - 13.01.2012 369.00 EUR sollte 27.01.2012 stehen
Winter 28.01.2012 - 03.02.2012 365.99 EUR sollte 24.02.2012 stehen
Winter 25.02.2012 - 02.03.2012 369.00 EUR sollte 30.03.2012 stehen
u.s.w.

wie komme ich nur an den letzten datum_bis Wert bevor der Preis wieder ändert?
 

Duddle

Posting-Frequenz: 14µHz

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Folgendes funktioniert ganz gut, es verhindert vorallendingen die Code-Doppelungen für das letzte Element.
PHP:
<?php
$daten = array();
$daten[] = array("id" => 1, "von" => "07.01.2012", "bis" => "14.01.2012", "preis" => 580);
$daten[] = array("id" => 2, "von" => "21.01.2012", "bis" => "27.01.2012", "preis" => 75);
$daten[] = array("id" => 3, "von" => "28.01.2012", "bis" => "03.02.2012", "preis" => 75);
$daten[] = array("id" => 4, "von" => "04.02.2012", "bis" => "10.02.2012", "preis" => 200);
$daten[] = array("id" => 5, "von" => "11.02.2012", "bis" => "17.02.2012", "preis" => 200);
$daten[] = array("id" => 6, "von" => "18.02.2012", "bis" => "24.02.2012", "preis" => 100);

$gruppen = array();
$preis_vorher = null;
foreach($daten as $woche) {
	if($woche["preis"] != $preis_vorher) {
		//falls Preis verändert, neue Gruppe erstellen und aktuelle Woche rein
		$last = count($gruppen);
		$gruppen[] = array();
		$gruppen[$last][] = $woche;
		$preis_vorher = $woche["preis"];
	} else {
		//ansonsten nur die Woche rein
		$gruppen[$last][] = $woche;
	}
}

echo "<table>";
foreach($gruppen as $gruppe) {
	$preis_pro_woche = $gruppe[0]["preis"];
	$wochen = count($gruppe);
	$summe = $preis_pro_woche * $wochen;

	$von = $gruppe[0]["von"];
	$bis = $gruppe[$wochen-1]["bis"];

	echo "<tr>";
	echo "<td>$wochen * $preis_pro_woche = $summe</td>";
	echo "<td>$von</td>";
	echo "<td>$bis</td>";
	echo "</tr>";
}
echo "</table>";
?>


Duddle
 

winne52

Webmaster

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

danke Duddle,
werde ich mal einbauen und testen.
LG winne52
 

Schnoobby

Nicht mehr ganz neu hier

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Da ich NULL Plan von php hab hier mal ein bisschen Pseudo-Murks-Code um das Verständnis zu fördern.

Code:
// Felder initialisieren
§preis_alt = -1;
$von_alt = -1;
$bis_alt = -1;
$bezeichnung_alt = -1;
$summe = 0;

for ( zaehler = 0; zaehler < liste.Laenge; zaehler++) //alternativ mit foreach Schleife
{
    // Ausnahme fuer erste Zeile; Ausgangswerte setzen
  if ( $zaehler == 0 )
  {
    $preis_alt = liste[zaehler][0];
    $von_alt = liste[zaehler][1];
    $bis_alt = liste[zaehler][2];
    $bezeichung_alt = liste[zaehler][3];
  }
  else
  {
    // Werte des aktuellen Elements speichern
    $preis_neu = liste[zaehler][0];
    $von_neu = liste[zaehler][1];
    $bis_neu = liste[zaehler][2];
    $bezeichung_neu = liste[zaehler][3];
  
    // wenn alter und aktueller Preis uebereinstimmen
    // wird das Enddatum auf das aktuelle Enddatum
    // gesetzt und der Preis aufaddiert
    if ( $preis_alt == $preis_neu )
    {
       $bis_alt = $bis_neu;
       $summe += $preis_neu;
    }
    else
    {
      // wenn ein neuer Preis im aktuellen Element steht
      // werden erstmal die alten Daten ausgegeben
      WriteLine( $von_alt - $bis_alt : $summe $bezeichnung_alt );

      // danach die neuen Ausgangswerte des aktuellen Elements speichern
      $von_alt = $von_neu;
      $bis_alt = $bis_neu;
      $preis_alt = $preis_neu;
      $bezeichung_alt = $bezeichnung_neu;
      $summe = $preis_alt;
    }
  }
}
// zum schluss noch einmal das letzte Element ausgeben
WriteLine( $von_alt - $bis_alt : $summe $bezeichnung_alt );
 

winne52

Webmaster

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Folgendes funktioniert ganz gut, es verhindert vorallendingen die Code-Doppelungen für das letzte Element.
PHP:
<?php
$daten = array();
$daten[] = array("id" => 1, "von" => "07.01.2012", "bis" => "14.01.2012", "preis" => 580);
$daten[] = array("id" => 2, "von" => "21.01.2012", "bis" => "27.01.2012", "preis" => 75);
$daten[] = array("id" => 3, "von" => "28.01.2012", "bis" => "03.02.2012", "preis" => 75);
$daten[] = array("id" => 4, "von" => "04.02.2012", "bis" => "10.02.2012", "preis" => 200);
$daten[] = array("id" => 5, "von" => "11.02.2012", "bis" => "17.02.2012", "preis" => 200);
$daten[] = array("id" => 6, "von" => "18.02.2012", "bis" => "24.02.2012", "preis" => 100);
 
$gruppen = array();
$preis_vorher = null;
foreach($daten as $woche) {
    if($woche["preis"] != $preis_vorher) {
        //falls Preis verändert, neue Gruppe erstellen und aktuelle Woche rein
        $last = count($gruppen);
        $gruppen[] = array();
        $gruppen[$last][] = $woche;
        $preis_vorher = $woche["preis"];
    } else {
        //ansonsten nur die Woche rein
        $gruppen[$last][] = $woche;
    }
}
 
echo "<table>";
foreach($gruppen as $gruppe) {
    $preis_pro_woche = $gruppe[0]["preis"];
    $wochen = count($gruppe);
    $summe = $preis_pro_woche * $wochen;
 
    $von = $gruppe[0]["von"];
    $bis = $gruppe[$wochen-1]["bis"];
 
    echo "<tr>";
    echo "<td>$wochen * $preis_pro_woche = $summe</td>";
    echo "<td>$von</td>";
    echo "<td>$bis</td>";
    echo "</tr>";
}
echo "</table>";
?>


Duddle

habe Deinen Script angepasst und er funktioniert soweit
nur er zeigt immer noch alle Wochen an

Jahreswechsel 31.12.2011-06.01.2012 1,044.99 Euro
Winter 07.01.2012-13.01.2012369.00 Euro
Winter 14.01.2012-20.01.2012369.00 Euro
Winter21.01.2012-27.01.2012369.00 Euro
Winter28.01.2012-03.02.2012365.99 Euro
Winter04.02.2012-10.02.2012365.99 Euro
Winter11.02.2012-17.02.2012365.99 Euro
Winter18.02.2012-24.02.2012365.99 Euro
Winter25.02.2012-02.03.2012369.00 Euro
Winter03.03.2012-09.03.2012369.00 Euro
Winter10.03.2012-16.03.2012369.00 Euro
Winter17.03.2012-23.03.2012369.00 Euro

möchte aber das anzeigen
Jahreswechsel 31.12.2011-06.01.2012 1,044.99 Euro
Winter 07.01.2012-27.01.2012 369.00 Euro
Winter 28.01.2012-24.02.2012 365.99 Euro
u.s.w.

hier der angepasste Script
PHP:
$daten = array();
$daten[] = array("id" => $i++, "von" => "$datum_von", "bis" => "$datum_bis", "preis" => $pro_tag);
 
$gruppen = array();
$preis_vorher = null;
foreach($daten as $woche) {
    if($woche["preis"] != $preis_vorher) {
        //falls Preis verändert, neue Gruppe erstellen und aktuelle Woche rein
        $last = count($gruppen);
        $gruppen[] = array();
        $gruppen[$last][] = $woche;
        $preis_vorher = $woche["preis"];
    } else {
        //ansonsten nur die Woche rein
        $gruppen[$last][] = $woche;
    }
}
echo "<table>";
foreach($gruppen as $gruppe) {
    $preis_pro_tag = $gruppe[0]["preis"];
    $wochen = count($gruppe);
    $summe = ($preis_pro_tag *7) + $endreinigung;
    $summe = number_format($summe,2);
    $von = $gruppe[0]["von"];
    $bis = $gruppe[$wochen-1]["bis"];
 $von = date("d.m.Y",$von);
 $bis = date("d.m.Y",$bis);
    echo "<tr>";
 echo "<td>$saison_name</td>";
    echo "<td>$von</td>";
 echo "<td>-</td>";
    echo "<td>$bis</td>";
 echo "<td>$summe Euro</td>";
    echo "</tr>";
}
echo "</table>";
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Ich nehme an, diesen Teil hast du in der Datenbankanfrage-Schleife irgendwie eingebettet?

Falls ja, ist das nicht ganz korrekt. Du müsstest entweder erste alle Ergebnisse aus der Datenbank nacheinander in $daten schreiben und dann erst den "Auswertungs"-Teil ausführen. Oder du ersetzt das erste foreach mit der Datenbankabfrage-Schleife, dann bräuchtest du das Zwischen-Array $daten nicht.


Duddle
 

winne52

Webmaster

AW: brauche Hilfe beim Auslesen und Anzeigen von Daten aus einer SQL-Datenbank

Ich nehme an, diesen Teil hast du in der Datenbankanfrage-Schleife irgendwie eingebettet?

Falls ja, ist das nicht ganz korrekt. Du müsstest entweder erste alle Ergebnisse aus der Datenbank nacheinander in $daten schreiben und dann erst den "Auswertungs"-Teil ausführen. Oder du ersetzt das erste foreach mit der Datenbankabfrage-Schleife, dann bräuchtest du das Zwischen-Array $daten nicht.


Duddle

danke
es scheint aber mit dem o.g. Script über das Zwischen_Array $daten zu funktionieren

da die Ausgabe komplett ist

nur es sollen wie o.g .'ich möchte aber das anzeigen'
die Zusammenfassung der Wochen mit gleichem Preis

oder muss ich erst alle Daten ins Array geben
bevor ich den Auswertungsteil ausführe?
ich denke ja
habe Deinen Script getestet und es funktioniert so wie es sein soll
habe nur die Wiederholungen aus meiner while-Schleife beim auslesen der Daten
muss es nur anpassen
also vielen Dank für Deine Hilfe
LG winne52
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.477
Mitglieder
67.559
Neuestes Mitglied
hanuta
Oben