Avatar billede egeriis Nybegynder
26. januar 2006 - 14:43 Der er 15 kommentarer og
1 løsning

Unknown coloumn age - SELECT --calculation-- AS age FROM

Jeg har flg. query, men det giver fejlen "Unknown coloumn age in where clause", hvad er der galt?

"SELECT u.*,e.*,MAX(l.timestamp) AS lastlogin,((YEAR(CURDATE())-YEAR(u.birth)) - (RIGHT(CURDATE(),5)<RIGHT(u.birth,5))) AS age FROM users AS u, expanded AS e JOIN log AS l ON l.uid=u.id WHERE e.uid=u.id && " . $q . " ORDER BY lastlogin DESC"
Avatar billede fennec Nybegynder
26. januar 2006 - 14:49 #1
Hvad står det i $q variablen??
Avatar billede nidyahou Praktikant
26. januar 2006 - 14:49 #2
det den siger er vel at kolonnen "age" ikke findes i din db... har du tjekket at den ikke hedder Age eller aGe?
Avatar billede egeriis Nybegynder
26. januar 2006 - 14:56 #3
Nå ja, sorry, skulle selvf. have postet queryet. Here it is:

SELECT u.*,e.*,MAX(l.timestamp) AS lastlogin,((YEAR(CURDATE())-YEAR(u.birth)) - (RIGHT(CURDATE(),5)<RIGHT(u.birth,5))) AS age FROM users AS u, expanded AS e JOIN log AS l ON l.uid=u.id WHERE e.uid=u.id && age >= '15' && u.country='dk' ORDER BY lastlogin DESC


Og age er jo defineret som alias. Det plejer da godt at kunne blive brugt i WHERE clause.
Avatar billede fennec Nybegynder
26. januar 2006 - 14:57 #4
Prøv at ændre alle && til AND
Avatar billede egeriis Nybegynder
26. januar 2006 - 15:01 #5
Det hjalp ikke.
Men er && og AND ikke præcis det samme?
Avatar billede fennec Nybegynder
26. januar 2006 - 15:11 #6
Jo, men det er bedre at bruge AND da det er cross-database, så skifter du DB senere, skal du ikke ændre i din kode :o)
Avatar billede egeriis Nybegynder
26. januar 2006 - 15:11 #7
For the record. Det er MySQL 4.1.11 som kører på min server.
Avatar billede egeriis Nybegynder
26. januar 2006 - 15:11 #8
Okay :)

Men ser det mit query ellers ikke korrekt ud?
Avatar billede fennec Nybegynder
26. januar 2006 - 15:12 #9
Der skal desuden ikke ' omkring 15. Det er jo en tal-sammenligning.
Avatar billede egeriis Nybegynder
26. januar 2006 - 15:14 #10
Det er også korrekt. Men det ændrer jo desværre ikke på så meget.
Avatar billede fennec Nybegynder
26. januar 2006 - 15:22 #11
Så er der kun tilbage at smide alias koden direkte ind:

SELECT u.*,e.*,MAX(l.timestamp) AS lastlogin,((YEAR(CURDATE())-YEAR(u.birth)) - (RIGHT(CURDATE(),5)<RIGHT(u.birth,5))) AS age FROM users AS u, expanded AS e JOIN log AS l ON l.uid=u.id WHERE e.uid=u.id AND ,((YEAR(CURDATE())-YEAR(u.birth)) - (RIGHT(CURDATE(),5)<RIGHT(u.birth,5))) >= 15 AND u.country='dk' ORDER BY lastlogin DESC
Avatar billede fennec Nybegynder
26. januar 2006 - 15:22 #12
Der var lige smuttet et komma ind:
SELECT u.*,e.*,MAX(l.timestamp) AS lastlogin,((YEAR(CURDATE())-YEAR(u.birth)) - (RIGHT(CURDATE(),5)<RIGHT(u.birth,5))) AS age FROM users AS u, expanded AS e JOIN log AS l ON l.uid=u.id WHERE e.uid=u.id AND ((YEAR(CURDATE())-YEAR(u.birth)) - (RIGHT(CURDATE(),5)<RIGHT(u.birth,5))) >= 15 AND u.country='dk' ORDER BY lastlogin DESC
Avatar billede egeriis Nybegynder
26. januar 2006 - 15:31 #13
Uha. Ja, I guess so.. Prøver det lige af.
Avatar billede egeriis Nybegynder
26. januar 2006 - 15:44 #14
Det virkede jo.. Naturligvis.. Tak for hjælpen..

Vil naturligvis gerne stadig høre hvis det var muligt med alias.
Avatar billede egeriis Nybegynder
26. januar 2006 - 15:44 #15
Fennec: Hvis du poster et svar kaster jeg nogle point efter dig :)
Avatar billede fennec Nybegynder
26. januar 2006 - 15:51 #16
Mente da også at MySQL kunne bruge alias i where, men jeg sidder desværre ikke et sted hvor jeg kan teste det. Men vi fandt da en løsning...

.o) <-- One Eyed Jack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester