|
| [MYSQL 5] Bruge select kolonne i where Fra : Martin |
Dato : 09-01-08 17:04 |
|
Sidder med denne
SELECT ((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
MONTH(birthdate) ) AS monthold
FROM
users
WHERE
monthold > 300
Men får fejlen "Unknown column 'monthold' in where caluse"
Hvilket jo selvfølgelig er rigtigt nok, så man kan ikke bruge en select
kolonne i where eller hvad?
Ville jo gerne nødigt undgå at skrive
SELECT ((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
MONTH(birthdate) ) AS monthold
FROM
users
WHERE
((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
MONTH(birthdate) ) > 300
| |
Søren (10-01-2008)
| Kommentar Fra : Søren |
Dato : 10-01-08 10:56 |
|
> SELECT ((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
> MONTH(birthdate) ) AS monthold
> FROM
> users
> WHERE
> monthold > 300
>
> Men får fejlen "Unknown column 'monthold' in where caluse"
> Hvilket jo selvfølgelig er rigtigt nok, så man kan ikke bruge en select
> kolonne i where eller hvad?
Nej, du kan ikke bruge en SELECT i din WHERE da SELECT først selektéres
_efter_ WHERE.
> Ville jo gerne nødigt undgå at skrive
>
> SELECT ((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
> MONTH(birthdate) ) AS monthold
> FROM
> users
> WHERE
> ((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
> MONTH(birthdate) ) > 300
Men det bliver du nødt til
| |
Peter Brodersen (10-01-2008)
| Kommentar Fra : Peter Brodersen |
Dato : 10-01-08 11:10 |
|
On Wed, 09 Jan 2008 17:03:35 +0100, Martin <maaNO@SPAMscandesigns.dk>
wrote:
>Hvilket jo selvfølgelig er rigtigt nok, så man kan ikke bruge en select
>kolonne i where eller hvad?
Nej, aliaser er ikke trådt i kraft her, så at sige. Hvis du
insisterer, kan du bruge HAVING (som dog også ligger efter en GROUP
BY), men det er ikke nødvendigvis meget pænere:
SELECT ((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
MONTH(birthdate) ) AS monthold
FROM
users
HAVING
monthold > 300
Du kan også overveje at oprette en MySQL-funktion til formålet aht.
overskueligheden.
--
- Peter Brodersen
Kendt fra Internet
| |
Martin (10-01-2008)
| Kommentar Fra : Martin |
Dato : 10-01-08 11:51 |
|
Peter Brodersen wrote:
> On Wed, 09 Jan 2008 17:03:35 +0100, Martin <maaNO@SPAMscandesigns.dk>
> wrote:
>
>> Hvilket jo selvfølgelig er rigtigt nok, så man kan ikke bruge en select
>> kolonne i where eller hvad?
>
> Nej, aliaser er ikke trådt i kraft her, så at sige. Hvis du
> insisterer, kan du bruge HAVING (som dog også ligger efter en GROUP
> BY), men det er ikke nødvendigvis meget pænere:
>
> SELECT ((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
> MONTH(birthdate) ) AS monthold
> FROM
> users
> HAVING
> monthold > 300
Aha... så det er sådan man kan bruge HAVING - smart!
>
> Du kan også overveje at oprette en MySQL-funktion til formålet aht.
> overskueligheden.
>
// Her må field jo både være DATE, DATETIME, TIMESTAMP - så hvordan skal
den defineres ?
CREATE FUNCTION MONTH_OLD (field DATETIME)
RETURNS ((YEAR(NOW()) - YEAR(field)) * 12) + ( MONTH(NOW()) - >
MONTH(field) )
END
SELECT MONTH_OLD(birthdate) FROM table WHERE MONTH_OLD(birthdate) > 300
Er det korrekt forstået, så læste jeg også noget med DEMILITER, hvad er
det lige den gør? Med eller uden DEMILITER så får jeg en fejl i min
query - så et eller andet må der være galt :)
| |
Martin (10-01-2008)
| Kommentar Fra : Martin |
Dato : 10-01-08 11:54 |
|
Martin wrote:
> Peter Brodersen wrote:
>> On Wed, 09 Jan 2008 17:03:35 +0100, Martin <maaNO@SPAMscandesigns.dk>
>> wrote:
>>
>>> Hvilket jo selvfølgelig er rigtigt nok, så man kan ikke bruge en
>>> select kolonne i where eller hvad?
>>
>> Nej, aliaser er ikke trådt i kraft her, så at sige. Hvis du
>> insisterer, kan du bruge HAVING (som dog også ligger efter en GROUP
>> BY), men det er ikke nødvendigvis meget pænere:
>>
>> SELECT ((YEAR(NOW()) - YEAR(birthdate)) * 12) + ( MONTH(NOW()) -
>> MONTH(birthdate) ) AS monthold
>> FROM
>> users
>> HAVING
>> monthold > 300
>
> Aha... så det er sådan man kan bruge HAVING - smart!
>
>>
>> Du kan også overveje at oprette en MySQL-funktion til formålet aht.
>> overskueligheden.
>>
>
> // Her må field jo både være DATE, DATETIME, TIMESTAMP - så hvordan skal
> den defineres ?
>
> CREATE FUNCTION MONTH_OLD (field DATETIME)
> RETURNS ((YEAR(NOW()) - YEAR(field)) * 12) + ( MONTH(NOW()) - >
> MONTH(field) )
> END
>
> SELECT MONTH_OLD(birthdate) FROM table WHERE MONTH_OLD(birthdate) > 300
>
> Er det korrekt forstået, så læste jeg også noget med DEMILITER, hvad er
> det lige den gør? Med eller uden DEMILITER så får jeg en fejl i min
> query - så et eller andet må der være galt :)
Har også prøvet med
DELIMITER |
CREATE FUNCTION MONTH_OLD (field DATE)
RETURNS ((YEAR(NOW()) - YEAR(field)) * 12) + ( MONTH(NOW()) - >
MONTH(field) )
END|
DELIMITER ;
SELECT MONTH_OLD(birthdate) FROM users WHERE MONTH_OLD(birthdate) > 300;
Men denne giver også fejl - kan forstå at DEMILITER er tegnet imellem 2
queries(?)
| |
Leif Neland (10-01-2008)
| Kommentar Fra : Leif Neland |
Dato : 10-01-08 18:01 |
|
Martin skrev:
> Ville jo gerne nødigt undgå at skrive
>
>
Jamen så skriv du da det, siden du så gerne vil
Enten "ville gerne undgå at skrive"
eller "ville nødigt skrive"
Det vil jeg nødigt frabede at undgå at få en kommentar til
Leif
| |
|
|