/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[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

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste