[MySQL] Warum bringt Query mit AS und WHERE unbekannten Fehler?

bntaon

Grünschnabel
Diese Query funktioniert nicht:

SELECT `name`, (YEAR(CURDATE()) - YEAR(`birth`)) - (RIGHT(CURDATE(), 5) < RIGHT(`birth`, 5)) AS `age` FROM `members` WHERE `age` >= 18

Ich habe aber keine Ahnung was da los ist! mysql-Bug? Mein Fehler?


##### Hier noch der DUMP #####

-- mysql version: 4.1.12
-- PHP Version: 4.3.11

-- Table structure for table `members`

CREATE TABLE `members` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`name` varchar(16) NOT NULL default '',
`birth` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) TYPE=MyISAM;

-- Dumping data for table `members`

INSERT INTO `members` (`id`, `name`, `birth`) VALUES (2, 'bobby', '1980-01-01');
INSERT INTO `members` (`id`, `name`, `birth`) VALUES (3, 'billy', '1982-01-01');
 
Zuletzt bearbeitet:
Bei mir gehts auch nicht, aber ich denke nicht das es ein Bug ist, das wird nen Synbtax Fehler sein moder nen Logischer *grübel*

:Edit:

Ist es nicht auch einfacher mit nem Timestamp zu arbeiten?
 
Zuletzt bearbeitet:
1. Was meinst du mit timestamp?

Soll die Spalte `birth` ein timestamp sein?

2. Das ist doch egal ob das ein Timestamp ist oder nicht! Ich muss doch das Alter berechnen.

Oder hast du eine andere Loesung?

3. Ich will einfach nur Benutzer mit einem bestimmten Alter anzeigen. MySQL wird doch da nicht in die Knie gehen!?

PS: Wegen Syntaxfehler: Darf ein WHERE-Statement kein AS-Alias enthalten?
 
Zuletzt bearbeitet:
Arbeitest du noch mit einer Scriptsparache wie php oder so?
Wenn ja wäre es denke ich einfach das über PHP zu machen, also erst die Daten aus der DB holen und dann erst berechnen...
 
Nein, in der hinsicht kann ich leider keine unterstützung bieten.
Aber in PHP würde ich es besser realisieren können.
Da sollte es kein Problem sein.
 
Kannst du mir kurz schreiben, wie du es in PHP besser realisieren kannst?

Ich nehme woll doch die PHP-Solution, weil mein SQL-Code sieht so aus:
SELECT `name`, (YEAR(CURDATE()) - YEAR(`birth`)) - (RIGHT(CURDATE(), 5) < RIGHT(`birth`, 5)) AS `age` FROM `members` WHERE (YEAR(CURDATE()) - YEAR(`birth`)) - (RIGHT(CURDATE(), 5) < RIGHT(`birth`, 5)) >= 21 AND (YEAR(CURDATE()) - YEAR(`birth`)) - (RIGHT(CURDATE(), 5) < RIGHT(`birth`, 5)) <= 30
Und da kommen noch GROUP BY, ORDER BY und eine Menge JOINS dazu..
 

Neue Beiträge

Zurück