ERLEDIGT
NEIN
NEIN
ANTWORTEN
15
15
ZUGRIFFE
471
471
EMPFEHLEN
-
Hallo zusammen,
ich habe 2 Tabellen (tab_order: id, orderdate, email & tab_config name, delay) und muss diese Verknüpfen.
In der tab_config stehen der name und delay (Verzögerung-Tage) 5, 7, 10. Nun soll bei abruf der tab_order die spalte tab_order.orderdate mit dem aktuellen Datum und tab_config.delay in Beziehung gebracht werden.
Ist die Order mehr als 5-7 Tage her, wähle name aus der Zeile delay 5, bei 7-10 wähle name aus der Zeile delay 7 usw.
Wie macht man sowas?
Danke
querytail
-
Als erstes sollten wir mal definieren mit was für einer Datenbank du arbeiten willst. MySQL, Oracle, MS SQL?
Zudem versteh ich deine Beschreibung nicht wirklich
Mach mir bitte ein Datenbeispiel mit Tabellen. So in der Art:
Das hab ich:
Code :1 2 3 4 5 6 7 8 9 10 11 12
Tabelle mitarbeiter id | firma_id | name -------------------- 1 | 1 | MA1 2 | 1 | MA2 3 | 2 | MA3 Tabelle Firma id | name --------------------- 1 | firma1 2 | firma2
Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code :1 2 3 4
firma_id | firma_name | anzahl_mitarbeiter ------------------------------------------ 1 | firma1 | 2 2 | firma3 | 1
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hach schade, hätte ich gewußt, dass Du so spät noch antwortest.
Klasse.
Es soll zuerst abgefragt werden, wie lange eine Bestellung her ist und ob check leer ist.
Liegt das orderdate soweit zurück, dass die delay-Zeit tab_config id 1 erreicht wird, soll der entsprechende Name der Tabelle tab_config von id 1 ausgegeben werden und in check das aktuelle Datum eingetragen werden. Ist in check ein Datum und wird die delay-Zeit von Tabelle tab_config id 2 erreicht, wird name 2 ausgegeben usw.
tab_order: id, orderdate, email, check
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
Tabelle: tab_order id | orderdate | email | check ----------------------------------------------------------- 1 | 20.09.2011 | xx@xx.de | 25.09.2011 2 | 21.09.2011 | xy@xx.de | 26.09.2011 3 | 24.09.2011 | xz@xx.de | Tabelle: tab_config id, name, delay ------------------------------------------ id | name | delay ---------------------------------------- 1 | abc | 5 2 | bcd | 7 3 | cde | 10
Danke im voraus
Grüße
Michael MeyerGeändert von Yaslaw (27.09.11 um 08:53 Uhr) Grund: Der Lesbarkeit zuliebe hab ich den code-Tag geschlossen
-
Ah so. Alles klar.
Du kannst bei chekc auf NULL prüfen.
Mit DATEDIFF kannst du die Differenz in Tagen von heute zum orderdate ermitteln.
Damit kannst du im SELECT-Teil eun Subquery absetzen um den Namen aus der Config auszulesen. Einfach alle Datensätze umgekehrt sortiert nehmen, deren delay kleiner oder Gleich der Datumsdifferenz ist. Und davon mit LIMIT den ersten auswählen
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
SELECT o.*, ( SELECT c.`name` FROM tab_config AS c WHERE c.delay <= DATEDIFF(NOW(), o.orderdate) ORDER BY delay DESC LIMIT 1 ) AS delay_text FROM tab_order AS o WHERE o.`check` IS NULL
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Wow, danke, das funktioniert schonmal und das auf "kleinstem Raum"
. Nur müsste die Prüfung von check ergeben, dass nur bei ungleich NULL der Name der nächsten Zeile (also ID 2 aus tab_config bzw. 3 usw.) genommen wird, wenn die delay-Zeit erreicht wird.
Dann habe ich noch eine Frage, wie ich das Sternchen durch gezieltes Abfragen der einzelnen Spalten ersetzen kann. Es scheint nämlich so zu sein, dass in der Schleife die Werte nur ausgegeben werden, wenn ich beispielsweise die id explizit eingebe.
Code :1
select o.id, o* ( ...
Großes DANKESCHÖN schonmal ******Geändert von querytail (27.09.11 um 16:00 Uhr) Grund: Fehler
-
Guten Morgen ******
So, das Sternchen konnte ich entfernen. Mit der Staffelung der Abfrage tue ich mich etwas schwer.
Im Moment sieht es so aus, dass keine Ausgabe mehr kommt, wenn in CHECK ein Datum steht. Die endgültige Prüfung von CHECK müsste so aussehen, dass ID1 nur ausgegeben wird, wenn NULL und ID2, ID3 usw. aus tab_config nur dann ausgegeben werden, wenn CHECK ungleich NULL bzw. 0 und delay von ID2, ID3 usw. erreicht.
Kann ich das mit IF oder CASE machen?
-
Ich versteh Bahnhof.
Mach mir bitte ein Datenbeispiel mit Tabellen. So in der Art:
Das hab ich:
Code :1 2 3 4 5 6 7 8 9 10 11 12
Tabelle mitarbeiter id | firma_id | name -------------------- 1 | 1 | MA1 2 | 1 | MA2 3 | 2 | MA3 Tabelle Firma id | name --------------------- 1 | firma1 2 | firma2
Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code :1 2 3 4
firma_id | firma_name | anzahl_mitarbeiter ------------------------------------------ 1 | firma1 | 2 2 | firma3 | 1
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hallo, Beim Schreiben ist mir aufgefallen, dass ich eine weitere Spalte zur Prüfung benötige. Ich habe die Spalte active in tab_order eingesetzt.
Ein Beispiel:
In der Tabelle tab_order unter id 3 ist in check keine Eintragung, weshalb nach erreichen des delays tab_config der name aus id 1 (abc) ausgegeben wird. Gleichzeitig wird in Check ein Datum eingetragen. Das ist korrekt und soll so bleiben.
Nun soll aber auch geprüft werden, ob in check ungleich NULL und active NULL ist. Dann würde bei erreichen der delay-Zeit bei id 2 der name ausgegeben werden. Bei 1 passiert nichts mehr.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
Tabelle: tab_order id | orderdate | email | check | active --------------------------------------------------------------------- | -------- 1 | 20.09.2011 | xx@xx.de | 25.09.2011 | 1 2 | 21.09.2011 | xy@xx.de | 26.09.2011 | 3 | 24.09.2011 | xz@xx.de | | Tabelle: tab_config id, name, delay ------------------------------------------ id | name | delay ---------------------------------------- 1 | abc | 5 2 | bcd | 7 3 | cde | 10
-
Kommt auf den Datentype von active an. Wenn es ein Int ist und er NULL oder 1 ist, dann kannst ud es so lösen
Code sql:1 2 3 4
... WHERE o.`check` IS NULL OR o.active IS NULL
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Das Problem ist, dass so bei active = 1 und check = NULL auch der Name ausgegeben wird. Diesen Fall muss ich irgendwie unterbinden.
-
Dann prüfe nur auf active
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Das ist der Knackpunkt. Ich will ja, dass die Ausgabe von Name (Tab_Config) in ID2 ID3 usw. nur ausgegeben werden, wenn das Feld CHECK nicht NULL ist.
Solange das Feld NULL ist, soll immer nur der Name aus ID1 angezeigt werden. Quasi ein Mahnprinzip. Erst wenn das erste erfolgt ist, dann das 2. und dann das dritte.Geändert von querytail (28.09.11 um 14:45 Uhr)
-
Ich versteh jeden deiner Beiträge anderst. Jedesmal meine ich du willst dies, dann das und beim nächsten mal jenes.
Ein Beispiel der Daten die du hast hast du mir bereits tabelarisch gezeigt. Nun poste mal eine Resultat-Tabelle wie du sie dir wünschst.
Dazu die Anforderungen Punkt für Punkt.
Zudem woher kommen die Felder ID2 und ID3? Du hast nur pro Tabelle eine Feld ID ohne Suffix-Nummer. Wenn du meinst das Feld ID mit dem Inhalt 3, dann schreib bitte welches Feld ID. Du hast deren 2.
Ich rate mal einfach mal weiter....
Code sql:1 2 3
WHERE NOT o.`check` IS NULL AND o.active IS NULL
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Die Änderungen sind aber nur marginal (zumindest für mich
Bin halt nicht so vertraut mit dem ganzen, muss aber trotzdem mal wieder eine Aufgabe lösen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
Tabelle: tab_order id | orderdate | email | check | active ------------------------------------------------------------| ----------- 1 | 20.09.2011 | xx@xx.de | 25.09.2011 | 1 2 | 21.09.2011 | xy@xx.de | 26.09.2011 | 3 | 24.09.2011 | xz@xx.de | | Tabelle: tab_config id, name, delay ------------------------------------------ id | name | delay ---------------------------------------- 1 | abc | 5 2 | bcd | 7 3 | cde | 10
Bis auf ein paar Spalten, in den Notizen etc. drin stehen, habe ich nicht mehr, kann aber noch eine Spalte, sofern nötig hinzufügen. Sinn ist halt, immer bei 1 zu beginnen, Eintrag in CHECK machen, dann weiter mit ID2 und ID3 (je nach DELAY).
-
Diese Aufstellung kenne ich.
Wie soll das Resultat aussehen?
Und nochmals. Was ist ID2? Was ist ID3?---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
Sortieren nach Datum und nach jetztiger Zeit
Von ciberjoerg im Forum PHPAntworten: 1Letzter Beitrag: 21.09.09, 08:23 -
animation nach zeit
Von einfach nur crack im Forum Flash PlattformAntworten: 4Letzter Beitrag: 01.05.07, 14:34 -
1.Zeit errechnung 2. mysql abfrage
Von cyber_rest im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 1Letzter Beitrag: 26.08.04, 11:46 -
zeit nach Abfrage stimmt nicht
Von droni im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 29.01.04, 18:05 -
SQL-Abfrage Zeit messen!
Von Terrance & Philipp im Forum ASPAntworten: 4Letzter Beitrag: 26.09.01, 08:36





Zitieren

Login





