Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Layoutprobleme? - Styleswitcher!

Antwort
 
Themen-Optionen
Alt 31.01.2007, 21:07 Nach oben    #1
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard Geburtstagsliste - wie der query?

Also. Ich habe eine Liste mit Namen und dazugehörigen Geburtstagen, die im Format date vorliegen.

Nun möchte ich gerne ein query haben, das mir die Geburtstage der nächsten x Tage zurückliefert. Da aber nunmal die Leute nicht alle im Jahre 2007 geboren sind, kann ich nicht einfach mit between und dem passenden timestamp arbeiten.

Es mangeld mir gerade an einer brauchbaren Idee das umzusetzen.

Meine Lieblingsseite zu dem Thema hat mir leider auch nicht geholfen...

Hat jemand von euch eine Idee?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.01.2007, 21:32 Nach oben    #2
WarrenFaith
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.500
Standard

hm... einfach abfragen zwischen Tag-Monat% und Tag-Monat% (o.ä.) hab ehrlich gesagt noch nie mit den date-funktionen von mysql gearbeitet, aber so etwa sollte es doch machbar sein oder? also ein between und das Jahr mit % ersetzen...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 10:32 Nach oben    #3
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard

Ein
sql Code:
  1. SELECT
  2.     `nachname` , `vorname` , `gtag`
  3. FROM
  4.     `adressen`
  5. WHERE
  6.     `gtag`
  7.   BETWEEN
  8.     '%-01-30'
  9.   AND
  10.     '%-02-10'
liefert mir leider nur alle Personen, für die kein Geburtstag eingetragen ist. Die, die in dem angegebenen Zeitraum Geburtstag haben, bleiben komplett unerwähnt.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 10:57 Nach oben    #4
WarrenFaith
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.500
Standard

Versuchs mal damit:
sql Code:
  1. SELECT
  2.     `nachname` , `vorname` , `gtag`
  3. FROM
  4.     `adressen`
  5. WHERE
  6.     ( MONTH(`gtag`) > MONTH(NOW()) AND DAY(`gtag`) >= DAY(NOW()) )
  7.     AND
  8.     MONTH(`gtag`) < (MONTH(NOW()) + 2)
Damit solltest du alle von heute bis ende übernächsten monat haben...
je nachdem wie tagesgenau deine abfrage sein soll müssteste das noch variieren.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 10:59 Nach oben    #5
robo47
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.049
Standard

les dich mal da durch: http://dev.mysql.com/doc/refman/5.0/...ons.html#c7091

dort und drunter gehts um Geburtstage und so kram, habs jetzt nur überflogen, aber die 2te lösung sieht klein und fein aus, wenn sie funktioniert, perfekt
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 15:18 Nach oben    #6
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard

den link von robo schau ich mir später noch in Ruhe an.

Derweil sieht's so aus:
sql Code:
  1. SELECT
  2.     `nachname` , `vorname` , `gtag`
  3. FROM
  4.     `adressen`
  5. WHERE
  6.     (MONTH( `gtag` ) >= MONTH( NOW( ) )
  7.   AND
  8.     DAYOFMONTH( `gtag` ) >= DAYOFMONTH( NOW( ) ))
  9.   AND
  10.     DAYOFMONTH( `gtag` ) < ( DAYOFMONTH( NOW( ) ) +7 )
  11.   AND
  12.     MONTH( `gtag` ) < ( MONTH( NOW( ) ) +1 )

und es scheint zu funktionieren...


// edit:
Zitat:
Zitat von robo47 Beitrag anzeigen
mmh... irgendwie habe ich das wohl voll übersehen.

Der obere der beiden scheint wohl nach längerem überlegen zustande gekommen zu sein

Ist jedenfalls ein ausgewachsendes statement!

Ich werde die drei mal eine Weile prüfen und mal schauen, wer als erstes fehlerhafte Ergebnisse liefert.

Euch schonmal ein Danke!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 16:14 Nach oben    #7
Basti
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 745
Standard

Was spricht gegen DATEDIFF?

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 16:26 Nach oben    #8
WarrenFaith
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.500
Standard

Es ist ja nicht gefragt, wieweit die Tage auseinanderliegen, sondern es sollen alle Geburtstage unter Ignorierung des Jahrgangs in einem Zeitraum ausgelesen werden.
DATEDIFF vergleicht doch nur 2 Daten und gibt ein Ergebnis raus.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 16:45 Nach oben    #9
Basti
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 745
Standard

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Es ist ja nicht gefragt, wieweit die Tage auseinanderliegen, sondern es sollen alle Geburtstage unter Ignorierung des Jahrgangs in einem Zeitraum ausgelesen werden.
Oh ja, hab ich geschlafen. Notfalls halt das Jahr einmal mit dem aktuellen Jahr ersetzen und einmal mit (aktuelles Jahr + 1) und in der Abfrage eben prüfen, ob eines der beiden Daten zwischen 0 und der Anzahl an Tagen liegt, für die man eben Übereinstimmungen sucht.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 17:56 Nach oben    #10
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard

der Datensatz soll auf jeden Fall unverändert bleiben!

Ich bin zuversichtlich, dass eine der drei Möglichkeiten hinreichend zum Ziel führen wird.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2007, 18:06 Nach oben    #11
robo47
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.049
Standard

Zitat:
Zitat von Jann Hendrik Beitrag anzeigen
der Datensatz soll auf jeden Fall unverändert bleiben!

Ich bin zuversichtlich, dass eine der drei Möglichkeiten hinreichend zum Ziel führen wird.
das kann man im query verändern, ich denke das meint Basti
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.12.2007, 15:19 Nach oben    #12
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard

Um dieses Thema nochmals aufzugreifen.

Derzeit sieht das bei mir so aus:
PHP-Code:
  $sql2 "SELECT
               `gtag`,
               EXTRACT(MONTH FROM `gtag` ) month,
               EXTRACT(DAY FROM `gtag` ) day ,
               DATE_FORMAT(`gtag`, '%d.%m.%Y') geburtstag,
               EXTRACT(YEAR FROM CURDATE()) - EXTRACT(YEAR FROM `gtag`) as jahre,
               `nachname`,
               `vorname`,
               `telefon`,
               `email`
           FROM
             `adressen`
           WHERE
             (
                 EXTRACT(MONTH FROM `gtag` ) = EXTRACT(MONTH FROM CURDATE())
               AND
                 DAYOFMONTH(`gtag`) > DAYOFMONTH(CURDATE())
               AND
                 DAYOFMONTH(`gtag`) <= (DAYOFMONTH(CURDATE()) + 15)
             )
             OR
             (
                 EXTRACT(MONTH FROM ADDDATE(CURDATE(), INTERVAL 15 DAY))<>EXTRACT(MONTH FROM CURDATE())
               AND
                 EXTRACT(MONTH FROM `gtag`) = EXTRACT(MONTH FROM ADDDATE(CURDATE(), INTERVAL 15 DAY))
               AND
                 DAYOFMONTH(`gtag`) <= DAYOFMONTH(ADDDATE(CURDATE(), INTERVAL 15 DAY))
             )
           ORDER BY month, day, ident ASC"

Soweit auch wunderbar - klappt gut.

Nur sortiert er leider die Geburtstages des Januar nun vor die Geburtstage, die im Rest dieses Jahres kommen.

Hat jemand eine Idee, wie ich das unterbinden kann? Die falsche Reihenfolge gibt es dann zwar nur für 2 Wochen im Jahr, aber schön wäre ja schon, wenn es richtig wäre...

Nachtrag: Mir ist klar, dass ich da nur bei dem ORDER BY month eine Unterscheidung einbauen muss, die dann entweder DESC oder ASC sortiert...


Nur ich bekomme das if(..) gerade nicht auf die Reihe.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!

Geändert von Jann Hendrik (22.12.2007 um 15:24 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.12.2007, 15:42 Nach oben    #13
$traight-$hoota
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 490
Standard

Wie wäre es mit ORDER BY `gtag`?
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.12.2007, 16:15 Nach oben    #14
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard

Zitat:
Zitat von $traight-$hoota Beitrag anzeigen
Wie wäre es mit ORDER BY `gtag`?
dann würde als erstes das Jahr berücksichtigt - und somit wäre das nicht das gewünschte Ergebnis!

Ich dachte an sowas:
PHP-Code:
ORDER BY month IF(EXTRACT(MONTH FROM CURDATE() ) = 12ASCDESC), dayident ASC 
nur dass mir das einen Fehler produziert...
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!

Geändert von Jann Hendrik (22.12.2007 um 16:20 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.12.2007, 17:07 Nach oben    #15
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard

darüber hinaus ist noch ein bug in dieser Zeile:
Code:
EXTRACT(YEAR FROM CURDATE()) - EXTRACT(YEAR FROM `gtag`) as jahre,
fällt mir mal gerade so auf - denn wenn der Geburtstag im nächsten Jahr liegt, dann muss auch das darauffolgende Jahr zur Berechnung herangezogen werden...

Wollte das nur eben vermerken.
Ich denke, das sollte aber kein Problem sein zu lösen, wenn das andere IF(...) läuft.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.01.2008, 12:12 Nach oben    #16
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard

Ich habe mich letztlich dafür entschieden die Sortierung über ASC bzw. DESC in PHP zu realisieren.

Das sieht nun so aus:
PHP-Code:
  $sql2 "SELECT
               `gtag`,
               EXTRACT(MONTH FROM `gtag` ) month,
               EXTRACT(DAY FROM `gtag` ) day ,
               DATE_FORMAT(`gtag`, '%d.%m.%Y') geburtstag,
               EXTRACT(YEAR FROM CURDATE()) - EXTRACT(YEAR FROM `gtag`) as jahre,
               `nachname`,
               `vorname`,
               `telefon`,
               `email`
           FROM
             `adressen`
           WHERE
             (
                 EXTRACT(MONTH FROM `gtag` ) = EXTRACT(MONTH FROM CURDATE())
               AND
                 DAYOFMONTH(`gtag`) > DAYOFMONTH(CURDATE())
               AND
                 DAYOFMONTH(`gtag`) <= (DAYOFMONTH(CURDATE()) + 15)
             )
             OR
             (
                 EXTRACT(MONTH FROM ADDDATE(CURDATE(), INTERVAL 15 DAY))<>EXTRACT(MONTH FROM CURDATE())
               AND
                 EXTRACT(MONTH FROM `gtag`) = EXTRACT(MONTH FROM ADDDATE(CURDATE(), INTERVAL 15 DAY))
               AND
                 DAYOFMONTH(`gtag`) <= DAYOFMONTH(ADDDATE(CURDATE(), INTERVAL 15 DAY))
             )
           ORDER BY month "
.((date('m') == 12)?'DESC':'ASC').", day, ident ASC"
Die Fehlberechnung des Alters korrigiere ich bei der Ausgabe.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2008, 11:52 Nach oben    #17
Basti
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 745
Standard

Damit bekommst du das hin:

Code:
SELECT
    name,
    birth,
    (YEAR(CURDATE())-YEAR(birth)) - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) AS age,
    DATE_ADD(birth, INTERVAL ((YEAR(CURDATE())-YEAR(birth)) - (RIGHT(SUBDATE(CURDATE(), 1),5)<RIGHT(birth,5)) + 1) YEAR) AS next_birthday

FROM
    addresses

WHERE
    DATE_ADD(birth, INTERVAL ((YEAR(CURDATE())-YEAR(birth)) - (RIGHT(SUBDATE(CURDATE(), 1),5)<RIGHT(birth,5)) + 1) YEAR) BETWEEN CURDATE() AND ADDDATE(CURDATE(), 30)

ORDER BY
    next_birthday
Gibt sicher noch feinere Wege.

Mich wundert, warum next_birthday in der WHERE-Klausel nicht benutzt werden kann. So hab ich die Berechnung jetzt doppelt drinnen und die Berechnung des Alters gar dreimal.

Im MySQL-Handbuch findest du in den Kommentaren auch noch eine Lösung:

http://dev.mysql.com/doc/refman/5.0/...culations.html

Basti

Geändert von Basti (02.01.2008 um 12:36 Uhr).
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2008, 13:53 Nach oben    #18
Jann Hendrik
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 1.550
Standard

Ich kann es gerade nicht testen, da meine Internetseit - und somit auch die db und pma down ist.

Werde ich aber nachholen!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

die aktuelle Umfrage: Wo kauft ihr eure Literatur?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

« [MySQL] Zufallsdatensätze zu Kategorien optimiert | nl2br mit mysql lösen? »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
query umschreiben nibblas Datenbanken 5