| 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! |
 |
|

31-03-2011, 13:03
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
Vergleich mit Zeile davor
Hallo,
folgendes Problem... ich habe eine Abfrage die DESC steht...
z.B.
PHP-Code:
SELECT ID, WERT1, WERT2 FROM `Tabelle1` WHERE `id` = XYZ ORDER BY `Tabelle1`.`ID` DESC LIMIT 10
Soo... Ergebnis sieht dann z.B. so aus
ID | WERT1 | WERT 2
1000 | 16516 | 2156165
800 | 54561 | 16516
25 | 5116 | 1561
Wie ist es möglich, den Wert mit der vorhergehenden Zeile zu vergleichen, also ID 1000 mit 800 und 800 mit 25??
|

31-03-2011, 13:08
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Was willst du damit bezwecken?
Stichwort wäre korrelierte Unterabfrage.
(Ggf. wäre auch ein SELF JOIN möglich, wobei ich mir da gerade nicht ganz vorstellen kann, wie man dort die „vorherige Zeile“ selektiert bekommt.)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

31-03-2011, 13:15
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
Ich möchte auf der einen Seite den Inhalt limitieren mit max 10 Anzeigen und auf der anderen Seite die Änderungen der Werte darstellen. Also zb. wie weit hat sicht der Wert1 von ID 1000 zu ID 800 geändert.
|

31-03-2011, 13:16
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
warum ermittelst du die Differenz nicht mit PHP? Das wäre doch das einfachste.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

31-03-2011, 13:18
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
hmm... würde ich ja gerne machen, wäre auch zu einfach, aber DESC in MySql ist nun mal nicht ASC...
(rückwärts/vorwärts)
Geändert von Nirus2000 (31-03-2011 um 13:24 Uhr)
Grund: Erweiterung
|

31-03-2011, 13:22
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Nirus2000
hmm... würde ich ja gerne machen, aber DESC ist nun mal nicht ASC...
|
Dann ist vorhergehende Zeile halt nächste Zeile.
Wenn du unsere Hilfe bei deinem Problem willst, dann beschreibe bitte deutlich und in ausreichender Ausführlichkeit, was dir Probleme bereitet.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

31-03-2011, 13:38
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
Gut.... ich versuche es besser zu beschreiben..
die Abfrage vereinfacht...
PHP-Code:
SELECT ID, WERT1, WERT2 FROM `Tabelle1` WHERE `id` = XYZ ORDER BY `Tabelle1`.`ID` DESC LIMIT 10
wird dann wie folgt ausgegeben per While-Schleife ausgegeben:
ID | WERT1 | WERT 2
1000 | 16516 | 2156165
800 | 54561 | 16516
25 | 5116 | 1561
soo...
nun soll der Wert in dieser While-Schleife mit den zuvor ausgegebenen verglichen werden.
Mit der Sortierung ASC ist das kein Problem... in einen Dummy den WERT1 bzw. WERT2 speichern und dann wieder vergleichen.
Da ich aber DESC sortiere, kann ich den Wert nicht in einen Dummy speichern, weil Wert davor noch nicht existiert. Desweiteren sind die ID's nicht fortlaufend sondern unsortiert.
Beispiel anhand von irgendwelchen ID's wie es jetzt ist mit Speicher Variable:
WHILE-ID -> VEGLEICHS-ID
8204 -> 0
5970 -> 8204
5345 -> 5970
4715 -> 5345
4021 -> 4715
3385 -> 4021
2731 -> 3385
2063 -> 2731
1427 -> 2063
779->1427
richtig wäre aber
WHILE-ID -> VEGLEICHS-ID
8204 -> 5970
5970 -> 5345
5345 -> 4715
4715 -> 4021
4021 -> 3385
3385 -> 2731
2731 -> 2063
2063 -> 1427
1427 -> 779
779 -> 0
|

31-03-2011, 13:43
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Nirus2000
Da ich aber DESC sortiere, kann ich den Wert nicht in einen Dummy speichern, weil Wert davor noch nicht existiert.
|
Ein „Wert davor“ existiert bei der Verarbeitung des ersten Datensatzes generell nicht, egal wie die Daten sortiert sind.
Er existiert erst ab dem zweiten Datensatz, den dein Script verarbeitet.
Zitat:
|
Desweiteren sind die ID's nicht fortlaufend sondern unsortiert.
|
Doch, sie sind sortiert, weil du das in der Query explizit angegeben hast.
Zitat:
richtig wäre aber
WHILE-ID -> VEGLEICHS-ID
8204 -> 5970
5970 -> [...]
|
Diesen ersten Vergleich kannst du durchführen, sobald du den zweiten Datensatz aus dem Abfrageergebnis geholt hast.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

31-03-2011, 13:45
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
hmm... logisch, aber die Ausgabe findet schon in der While-Schleife statt. Genau das ist mein Problem.
|

31-03-2011, 13:47
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
das ist ja nu noch einfacher ..
hole dir mit einer der mysql_fetch-Funktionen die Erste Zeile aus der Ergebnis-Tabelle
ID 8204 - den gibst du jetzt aber nicht sofort aus, sondern nun beginnt deine while-Schleife,
die liest mit ihrem mysql_fetch nun ihrerseits die 2te Zeile ein - und ab hier gibst du aus
Alte ID , Alte irgendwas , Differenz - Beträge (neue Werte hast du ja )
danach Alte Werte mit den aktuellen Überschreiben und Schleife wieder von vorn
__________________
Wer LESEN kann, ist klar im Vorteil!
|

31-03-2011, 13:52
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
hä? Versteh ich net...
|

31-03-2011, 14:03
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Du willst Werte vergleichen, die aber der Reihe nach ankommen. Vergleichen kannst du also erst, wenn der zweite Wert vorliegt und du den ersten gespeichert hast.
Pseudocode:
Code:
vergleichswert = wert_abrufen();
while (neuerwert = wert_abrufen()) {
differenz = neuerwert - vergleichswert;
vergleichswert = neuerwert;
}
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

31-03-2011, 14:39
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
danke Amica , dein Pseudocode erläutert wunderbar , was mein etwas umständlicher Text aussagen sollte
__________________
Wer LESEN kann, ist klar im Vorteil!
|

31-03-2011, 18:22
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
bei mir macht es einfach nicht klick....  wie soll ich den den Vergleichswert aufrufen und dann vergleichen?
|

31-03-2011, 18:27
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Nirus2000
wie soll ich den den Vergleichswert aufrufen
|
Mit wert_abrufen() ist in diesem Pseudocode natürlich das Holen des nächsten Datensatzes aus dem Abfrageergebnis gemeint - also die Anwendung einer der mysql_fetch-Funktionen.
Ein bisschen musst du schon logisch mitdenken (können), wenn du sowas mit Tipps von uns umsetzen willst.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|
|
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
|