[MYSQL] Query op basis van alias

Pagina: 1
Acties:

  • Speed_Sheep
  • Registratie: Augustus 2001
  • Laatst online: 25-11-2021
Gegooled maar daar was niets te vinden.
Op GOT vond ik alleen vragen als: "werken met database tabellen die dezelfde kolom namen bevatten", wat voor mij dus n.v.t. is.

Ik heb namelijk de volgende query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT 
YEAR( DATE_ADD( FROM_UNIXTIME( c.ncontractdate ) , INTERVAL( c.nconditions + s.nconditions )
DAY ) ) AS nyear, 
WEEK( DATE_ADD( FROM_UNIXTIME( c.ncontractdate ) , INTERVAL( c.nconditions + s.nconditions )
DAY ) ) AS nweek, 
UNIX_TIMESTAMP( DATE_ADD( FROM_UNIXTIME( c.ncontractdate ) , INTERVAL( c.nconditions + s.nconditions )
DAY ) ) AS ncommisiondate

FROM contract AS c, deliveryproduct AS dpr, supplier AS s

WHERE dpr.ncontractid = c.ncontractid
AND UNIX_TIMESTAMP( DATE_ADD( FROM_UNIXTIME( c.ncontractdate ) , INTERVAL( c.nconditions + s.nconditions )
DAY ) ) >=1083362400
AND UNIX_TIMESTAMP( DATE_ADD( FROM_UNIXTIME( c.ncontractdate ) , INTERVAL( c.nconditions + s.nconditions )
DAY ) ) <=1114898399
AND c.nsupplierid = s.nsupplierid
ORDER BY nyear, nweek


Nu is die query ontzettend groot, uitvoeren van query duurt echter niet lang. Wat ik wil is dus enkel verduidelijking van m'n query code. 8)
Het volgende stukje zie je meerdere keren in mijn query terug komen:
SQL:
1
2
DATE_ADD( FROM_UNIXTIME( c.ncontractdate ) , INTERVAL( c.nconditions + s.nconditions )
DAY ) )


Nu had ik gedacht, doe ik dit:
SQL:
1
2
3
4
5
6
7
8
9
10
11
SELECT YEAR(FROM_UNIXTIME(ncommisiondate)) AS nyear,
WEEK(FROM_UNIXTIME(ncommisiondate)) AS nweek,
UNIX_TIMESTAMP( DATE_ADD( FROM_UNIXTIME( c.ncontractdate ) , INTERVAL( c.nconditions + s.nconditions ) DAY ) ) AS ncommisiondate

FROM contract AS c, deliveryproduct AS dpr, supplier AS s

WHERE dpr.ncontractid = c.ncontractid
AND ncommisiondate >=1083362400
AND ncommisiondate <=1114898399
AND c.nsupplierid = s.nsupplierid
ORDER BY nyear, nweek


Maar dan krijg ik:
MySQL retourneerde: Documentatie
#1054 - Unknown column 'ncommissiondate' in 'where clause'

Nu snap ik die error maar al te goed. Normaal gebruik je aliassen alleen om op te sorteren, groupen. Hoe ik echter toch de alias "ncommissiondate" gebruiken?

Systeemspecs


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
K*t oplossing, maar andere ken ik niet. In php variabelen vullen en deze gewoon in je query replacen. Is zeker niet ideaal, maar je query blijft lekker overzichtelijk

  • Speed_Sheep
  • Registratie: Augustus 2001
  • Laatst online: 25-11-2021
Hmmz okey, was ik al bang voor. :'(
Dat is idd ook de manier die ik nu al gebruik. Heb herhalende stuk query in php var gezet. Tijdens opbouwen van query plak ik dat stuk er dan 4 keer in.

Had opzich wel verwacht dat er wel een methode voor was, denk namelijk dat bij grootte query's van bijvoorbeeld 10 tabellen dit wel regelmatig voor zal komen. Wat krijg je dan wel niet voor query's, als je die over een jaar moet bijwerken dan ben je eerst weer uren aan het bedenken hoe het ook al weer zit.

Bedankt voor hulp.
En als iemand anders nog een ander oplossing weet, gaarne :Y)

Systeemspecs


  • Roeligan
  • Registratie: December 2001
  • Laatst online: 22-07-2025

Roeligan

Feyenoord

als je een tabel aliast (is dat een woord?) doe je gewoon >> tabelnaam t, anderetabel a en in je query dus t.veldnaam, a.veldnaam

[ Voor 24% gewijzigd door Roeligan op 30-06-2004 10:18 ]

A real man fears not mortality for it's death, he fears mortality for it's lack of life!
RatPack #814


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Helaas kan dit niet. Aliassen/columns uit SELECT's zijn pas in het resultaatset beschikbaar en daardoor slechts evt voor sortering en groupering te gebruiken. 't Enige wat ik in SQL kan bedenken om dit te vereenvoudigen is het aanmaken van een paar FUNCTIONs of PROCEDUREs, iets wat MySQL nou weer niet kan.

  • Speed_Sheep
  • Registratie: Augustus 2001
  • Laatst online: 25-11-2021
Ok, duidelijk. Dan hou ik et zo :Y)
Bedankt allemaal.

Systeemspecs

Pagina: 1