| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

10-01-2010, 20:40
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
Auflistung aus MySQL und jeweils der Titel dazu?
Liebe PHP-Gemeinde
Ich hoffe es ist ok, wenn ich für diese Frage ein neues Thema erstelle. Auch weil es eine Fortsetzung bzw. eine Abänderung dieses Themas ist:
Thema
Folgender Datenbank-Aufbau ist vorhanden (wobei die Zahl am Anfang die ID ist und die am Schluss der Status):
Code:
1, Produkt A, weiss, 1
2, Produkt A, gelb, 1
3, Produkt A, blau, 1
4, Produkt A, rot, 1
5, Produkt B, weiss, 1
6, Produkt B, gelb, 1
7, Produkt B, blau, 1
8, Produkt B, rot, 1
9, Produkt C, weiss, 1
10, Produkt C, gelb, 1
11, Produkt C, blau, 1
12, Produkt C, rot
Ausgabe sollte folgendermassen sein:
Produkt A
weiss
gelb
blau
rot
Produkt B
weiss
gelb
blau
rot
Produkt C
weiss
gelb
blau
rot
Der Ansatz ist folgender:
Code:
$get_sql = new rex_sql;
$out = '';
for($z=0; $z<$get_sql->getRows(); $z++)
{
if($get_sql->getValue("status") == 1)
{
$out .= '<p>'.$get_sql->getValue("farbe").'</p>';
}
$get_sql->next();
}
$out .= '';
return $out;
So listet es mir einfach alle Farben untereinander auf. Und zwar in der richtigen Reihenfolge wie oben aufgeführt. Wie bekomme ich es aber nun hin, dass vor jeder Farbenauflistung auch das Produkt (A, B, C) angezeigt wird?
|

10-01-2010, 21:08
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Das Stichwort lautet: Gruppenwechsel
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

11-01-2010, 00:12
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
Gruppenwechsel ist mir absolut neu. Aber schauen wir mal ob ich es richtig verstanden habe...
Im Prinzip geht es beim Gruppenwechsel in meinem Fall um folgendes:
Ich gebe Produkt 1 aus mit der ersten Farbe.
Die Abfrage läuft weiter.. jetzt muss ich abfragen, ob der Titel "Produkt 1" bereits bei der vorherigen Ausgabe drin war.
Falls ja, gebe mir keinen Titel aus.
Falls nein, gebe Titel aus.
Habe ich das soweit richtig verstanden?
Code:
$get_sql = new rex_sql;
$out = '';
$titel = ''
for($z=0; $z<$get_sql->getRows(); $z++)
{
$titel = $get_sql->getValue("titel");
if($get_sql->getValue("status") == 1)
{
if($titel != $get_sql->getValue("titel");)
{
$out .= '<p></strong>'.$titel.'</strong></p>';
}
$out .= '<p>'.$get_sql->getValue("farbe").'</p>';
}
$get_sql->next();
}
$out .= '';
return $out;
Ich habe das Gefühl dass meinem Code noch etwas fehlt... Mir ist nicht ganz klar wie ich die Abfrage von der vorherigen Ausgabe machen soll. Ich nehme mal an, ich verstehe den Gruppenwechsel richtig, habe es aber nicht korrekt umgesetzt... Stimmt's?
|

11-01-2010, 00:22
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Fanello
Ich nehme mal an, ich verstehe den Gruppenwechsel richtig, habe es aber nicht korrekt umgesetzt... Stimmt's?
|
Ja, soweit ist das schon richtig.
Zitat:
|
Mir ist nicht ganz klar wie ich die Abfrage von der vorherigen Ausgabe machen soll.
|
Du merkst dir einfach am Ende jedes Schleifendurchlaufs den aktuellen Wert als „vorherigen”.
Am Anfang der Schleife vergleichst du, ob der (dabei) aktuelle Wert gleich dem vorherigen ist. Wenn nicht, gibst du ihn aus.
Um das ganze sauber zu haben, initialisierst du vor der Schleife noch deine Merkvariable für den ersten Durchlauf mit einem Wert, der in den eigentlichen Werten garantiert nicht vorkommt.
PHP-Code:
$wertAusVorherigemDurchlauf = false;
schleife ( ... ) {
if($aktuellerWert !== $wertAusVorherigemDurchlauf) {
// der aktuelle Wert ist nicht mehr gleich dem vorherigen,
// es hat also ein Gruppenwechsel stattgefunden
Ausgabe($aktuellerWert);
}
// weitere Vararbeitung, Ausgabe restlicher Daten des Datensatzes
// ...
// aktuellen Wert für nächsten Durchlauf als „vorherigen” merken
$wertAusVorherigemDurchlauf = $aktuellerWert;
}
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

11-01-2010, 13:56
|
|
Fanello
Registrierter Benutzer
|
|
Registriert seit: Jul 2005
Beiträge: 60
|
|
Code:
$get_sql = new rex_sql;
$titel_vorher = 'mami';
$out = '';
for($z=0; $z<$get_sql->getRows(); $z++)
{
if($get_sql->getValue("status") == 1)
{
$titel_aktuell = $get_sql->getValue("titel");
if($titel_aktuell !== $titel_vorher) {
$out .= '<h2>'.$get_sql->getValue("titel").'</h2>';
}
$out .= '<p>'.$get_sql->getValue("farbe").'</p>';
$titel_vorher = $titel_aktuell;
}
$get_sql->next();
}
$out .= '';
return $out;
vielen Dank, habs kapiert! So funktioniert es jetzt!!!
Geändert von Fanello (11-01-2010 um 14:03 Uhr)
|

11-01-2010, 14:16
|
|
Quetschi
PHP Expert
|
|
Registriert seit: Dec 2004
Beiträge: 2.759
|
|
OffTopic: Wundere mich gerade etwas, dass @wahsaga dich nicht auf dein scheinbar nicht gerade optimales DB-Layout aufmerksam gemacht hat.
__________________
Drelingdo
Krabonse
Simmannamando
|

12-01-2010, 18:52
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
OffTopic: Nen Gruppenwechsel hätte es ja trotzdem benötigt. 
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|