php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.06.2007, 12:22  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard Abfrage nach Geburtsdatum an bestimmtem Datum

Hallo,

ich habe folgende Abfrage
Code:
SELECT Count(*) FROM $table WHERE mealid='2' OR mealid='3'
die zählt, wieviele Leute ein bestimmtes Essen gewählt haben. Nun muss ich aber noch eine Abfrage hinzufügen, die das Geburtstdatum derjenigen zu einem bestimmten Datum berücksichtigt.
Also wenn die Personen am 28.07.2007 <= 13 Jahre sind, dann sollen sie mitgezählt werden. Die Spalte `birthday` ist gegeben.

Kann mir jemand auf die Sprünge helfen?

Danke und Gruß,
Marcel
maeck ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.06.2007, 14:10  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

Hi maeck!
ich schäme mich nicht zu sagen, dass mir 99% von Informationen fehlen um dir weiter zu helfen.
Die tabellenstruktur ist unbekannt,
Zusammenhang von Tabellen ist unbekannt.
Einziges was ich habe, dass bei dir die Spalte 'birthday' in einer Tabelle X existiert
__________________
Slava
http://bituniverse.com
Slava ist offline   Mit Zitat antworten
Alt 23.06.2007, 14:25  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Ups mein Fehler. Manchmal ist man so in seinen Gedanken, dass man ganz vergisst die notwendigen infos zu geben. Danke, dass du mich darauf aufmerksam machst.

Die eine Tabelle hat - in Auszügen - folgende Felder:
Code:
`birthday` date 
`surname` varchar(50)
`mealid` tinyint(1)
In diese Abfrage
Code:
SELECT Count(*) FROM $table WHERE mealid='2' OR mealid='3'
soll eine weitere WHERE-Klausel rein, die nur dann countet, wenn die Person mit dem Feld birthday am 28.07.2007 über oder gleich 13 Jahre ist.

Ich hoffe das reicht an Infos.

Gruß Marcel
maeck ist offline   Mit Zitat antworten
Alt 23.06.2007, 16:13  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Probier mal folgendes:
Code:
SELECT
  FLOOR((DATE_FORMAT(CURDATE(), '%Y%m%d') - DATE_FORMAT(birthday, '%Y%m%d')) / 10000) AS age,
  IF (age <= 13, 1, NULL) AS flag
FROM $table
WHERE mealid IN (2, 3)
CURDATE() kannst du durch einen beliebigen DATE-Wert ersetzen.
Bin nicht sicher ob das mit den Aliasen so klappt, aber sollte eigentlich.
Teil 1 rechnet auf altmodische Art das Alter zu einem bestimmten Zeitpunkt aus, mehr hier:
http://www.phpfriend.de/forum/viewto...ighlight=alter
Teil 2 liefert für den Alias "flag" NULL oder 1, je nach Alter. Vorsicht Stolperfalle:
http://dev.mysql.com/doc/refman/5.0/...ved-words.html
ALTER ist ein reserviertes Wort, also nicht bei dir im Query verwenden.

Schau dir das Ergebnis mal im phpMyAdmin an, stimmen die berechneten Alter für das Datum? Stimmen die Flags? Wenn ja kannst du das ganze jetzt ohne Aliase machen und in COUNT(IF(FLOOR(...) <= 13, 1, NULL) reinsetzen.
(COUNT zählt ja nur NOT NULL-Werte)

Irgendwie verstanden?
Zergling-new ist offline   Mit Zitat antworten
Alt 23.06.2007, 17:28  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

oder einfach
Where ...... and DATE_ADD(birthday,INTERVAL 13 YEAR)<=NOW()
__________________
Slava
http://bituniverse.com
Slava ist offline   Mit Zitat antworten
Alt 23.06.2007, 17:52  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Danke für eure Antworten!
Das von Slava scheint mir weniger kompliziert, so dass ich das versuchen werde Trotzdem danke auch an zergling!

@slava: kannst du mir ein bisschen was dazu erklären, denn ich würde es auch gerne verstehen.
maeck ist offline   Mit Zitat antworten
Alt 23.06.2007, 18:15  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

welche funktion verstehst du nicht?
mit DATE_ADD(birthday,INTERVAL 13 YEAR)<=NOW()
schaust du einfach ob der Kunde älter als 13 ist.
http://dev.mysql.com/doc/refman/4.1/...ction_date-add
__________________
Slava
http://bituniverse.com
Slava ist offline   Mit Zitat antworten
Alt 24.06.2007, 03:43  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Slava
oder einfach
Where ...... and DATE_ADD(birthday,INTERVAL 13 YEAR)<=NOW()

ziemlich kompakt muss ich zugeben
Zergling-new ist offline   Mit Zitat antworten
Alt 24.06.2007, 12:59  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

Zitat:
Zitat von Zergling
ziemlich kompakt muss ich zugeben
Ja
dafür habe ich gestern(oder heute Nacht) bei Werbung-forum so viel Quatsch geschrieben, dass ich heute schämen muss.
Ich würde gerne alle meine Beiträge aus dem Werbung-forum löschen, aber ich habe statt dessen eine Entschuldigung geschrieben und die Beiträge da gelassen, damit die Andere sehen können wie schnell bei Müdigkeit eine Paranoia-Stadium erreicht wird.
__________________
Slava
http://bituniverse.com
Slava ist offline   Mit Zitat antworten
Alt 24.06.2007, 13:23  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ist mir garnicht aufgefallen - liegt vielleicht daran, dass ich die Artikel auch gestern nacht schon durchgelesen hab
Zergling-new ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage von: Datum bis Datum Renovatio Datenbanken 4 06.06.2008 07:57
Abfrage der 5 aktuellsten Zeilen nach Datum Renovatio Datenbanken 2 01.06.2008 20:00
Datum bezogene mysql abfrage ApfeL Datenbanken 5 22.10.2006 16:03
Automatischer Email Versand ab einem bestimmtem Datum Cheesy PHP Tipps 2006 7 09.03.2006 16:37
WHERE abfrage nach Datum Datenbanken 2 06.03.2006 16:42
[Erledigt] Abfrage für &quot;aktuelles Datum ohne Jahreszahl&quot; ? Datenbanken 1 23.10.2005 09:47
wie sortiert man Datum bei SQL Abfrage? rockinchina PHP Tipps 2005-2 8 27.09.2005 12:57
Abfrage Datum mit gefilterten Werten.... Datenbanken 1 10.09.2005 19:59
Timecode während der Abfrage in lesbares Datum wandeln Datenbanken 3 20.08.2005 20:56
Selbständige Aktion bei bestimmtem Datum? odaa PHP Tipps 2005 1 12.05.2005 22:51
[Erledigt] String in Datum umwandeln und für Abfrage brauchbar machen PHP Tipps 2005 3 12.05.2005 00:24
[Erledigt] Abfrage mit bestimmtem Buchstaben Datenbanken 2 05.03.2005 13:57
Abfrage nach Datum selektieren! Boennchen PHP Tipps 2005 8 22.01.2005 13:04
timestamp von bestimmtem datum PHP Tipps 2004 2 24.09.2004 18:23
Datum Abfrage themonk PHP Tipps 2004 4 15.08.2004 01:08

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql geburtsdatum, geburtsdatum abfrage, geburtsdatum sql, geburtsdatum abfragen, danke nach geburtstag, sql geburtsdatum alter, sql vor bestimmten geburtsdatum, php geburtsdatum, sql php bestimmtes alter, abfrage nach geburtsdatum, geburtsdatum in sql, sql abfrage geburtsdatum, abfrage datum alter, http://www.php.de/datenbanken/44245-abfrage-nach-geburtsdatum-bestimmtem-datum.html, sql abfrage geburtstag, abfrage geburtsdatum, sql abfragen geburtsdatum, javascript geburtstag altersabfrage, sql geburtstagsabfrage, sql geburtstatum

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.