Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

MySQL SELECT variabele in WHERE

Pagina: 1
Acties:

  • mauricedb
  • Registratie: Maart 2007
  • Laatst online: 09:26
Het zal wel iets heeeeel kleins zijn, maar ik kan er niets voor vinden:

code:
1
SELECT *, EXTRACT(YEAR FROM datum) AS jaar FROM items WHERE online = 1 AND CONCAT(datum,' ',tijd) < '$datum'


Dit stukje moet alle items geven die online en kleiner dan de huidige datum zijn. Als ik dit stukje in phpmyadmin draai, dan krijg ik keurig een nieuw tabelletje met 'jaar' erbij. Als ik dit stukje erachter voeg:

code:
1
AND jaar = '$jaartal'


zodat er ook gefilterd wordt op een jaartal, dan geeft ie de fout aan dat jaar niet bestaat. Maar die heb ik toch eerder in de SELECT gemaakt? Het zal wel iets heel kleins/doms zijn, maar met Google kom ik er ook niet zo achter (misschien omdat ik niet op de goede woorden zoek..).

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Dingen die je in de select stopt worden niet herkent door je where clause.

Je moet dus in je where ook het hele EXTRA(...) gedeelte herhalen in plaats van jaar te gebruiken.

Dit dus:
SQL:
1
2
3
4
5
SELECT *, EXTRACT(YEAR FROM datum) AS jaar
FROM items
WHERE online = 1
AND CONCAT(datum,' ',tijd) < '$datum'
AND EXTRACT(YEAR FROM datum) = '$jaartal'


Ik weet overigens niet waar je $datum en $jaartal vandaan haalt maar ik kan je aanraden om parameterized queries te gebruiken.

[ Voor 47% gewijzigd door Wolfboy op 09-07-2013 22:28 ]

Blog [Stackoverflow] [LinkedIn]


  • mauricedb
  • Registratie: Maart 2007
  • Laatst online: 09:26
Aah okee, dan ga ik daar even naar kijken. Danku :)

  • console
  • Registratie: September 2002
  • Laatst online: 20:49
Als ik zo naar je query kijk heb je twee aparte velden voor datum en tijd? Je weet dat je hiervoor de type; DATETIME - kunt gebruiken? En waarom EXTRACT() gebruiken i.p.v. YEAR() ? En is er nog een reden waarom je het jaar wil retourneren i.p.v. het in PHP op te lossen?


MySQL:
1
2
3
4
5
SELECT *, YEAR(date) AS year 
FROM items 
WHERE online = 1 
AND date < '$date' 
AND YEAR(date) = '$year'

  • mauricedb
  • Registratie: Maart 2007
  • Laatst online: 09:26
Ja klopt. Niet helemaal handig maar in deze tabel heb ik dat nog wel zo ja, aparte velden voor datum en tijd. In de tussentijd had ik inderdaad (YEAR()) gevonden, deze werkt goed. Ik doe dit omdat er via een loop een onbepaald aantal jaren worden doorlopen. Voordat bovenstaande query uitgevoerd wordt, bepaald een query in welk jaar gekeken moet worden. Het resultaat daarvan staat in $jaartal.