tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
15
ZUGRIFFE
471
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    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
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  3. #3
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    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 Meyer
    Geändert von Yaslaw (27.09.11 um 08:53 Uhr) Grund: Der Lesbarkeit zuliebe hab ich den code-Tag geschlossen
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  5. #5
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    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
     

  6. #6
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    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?
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  8. #8
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    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
     

  9. #9
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  10. #10
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    Das Problem ist, dass so bei active = 1 und check = NULL auch der Name ausgegeben wird. Diesen Fall muss ich irgendwie unterbinden.
     

  11. #11
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  12. #12
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    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)
     

  13. #13
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  14. #14
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    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).
     

  15. #15
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  1. Sortieren nach Datum und nach jetztiger Zeit
    Von ciberjoerg im Forum PHP
    Antworten: 1
    Letzter Beitrag: 21.09.09, 08:23
  2. animation nach zeit
    Von einfach nur crack im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 01.05.07, 14:34
  3. 1.Zeit errechnung 2. mysql abfrage
    Von cyber_rest im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 1
    Letzter Beitrag: 26.08.04, 11:46
  4. zeit nach Abfrage stimmt nicht
    Von droni im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 29.01.04, 18:05
  5. SQL-Abfrage Zeit messen!
    Von Terrance & Philipp im Forum ASP
    Antworten: 4
    Letzter Beitrag: 26.09.01, 08:36