mysql query probleempje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Edwinboss
  • Registratie: Juni 2008
  • Laatst online: 04-06 21:15
ik heb een probleempje met een wat uitgebreidere query om te kijken of het betreffende product binnen een actie valt, ik post gewoon de hele query:
SELECT * FROM acties AS main_table
  WHERE acDateStart <= DATE(NOW())
  AND acDateEnd >= DATE(NOW())
  AND acType = 0
  AND (acArtikelNr = (SELECT prArtikelNummer FROM producten
                        WHERE prId = '1043')
        OR acGenreId = (SELECT prGenreId FROM producten
                          WHERE prId = '1043')
        OR (SELECT COUNT(asglSubGenreId) AS in_subgenre FROM (
              SELECT asglSubGenreId, psglSubGenreId FROM acSubGenreLinks, prSubGenreLinks
              WHERE asglActieId = acId
              AND psglProductId = '1043'
              AND asglSubGenreId = psglSubGenreId) AS dummy 
            ) > 0
      )

als ik dit doe krijg ik de melding: #1054 - Unknown column 'acId' in 'where clause'

het gaat dus fout op de regel

WHERE asglActieId = acId


ik heb

WHERE asglActieId = main_table.acId

ook geprobeert maar krijg dezelfde melding, zie ik iets over het hoofd en heb ik meer koffie nodig of doe ik gewoon iets wat niet kan?

WHERE asglActieId = '23'

werkt wel gewoon

Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024

CRiMiNaL

Witlof ^^

acId lijkt mij zo te zien een veld uit je maintable die je wilt gebruiken in je subquery,
dus dan zul je
code:
1
WHERE asdlActieId = main_table.acId

moeten gebruiken. Anders moet je even verduidelijken in welke tabel het veld "acId" staat

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • Edwinboss
  • Registratie: Juni 2008
  • Laatst online: 04-06 21:15
dat heb ik geprobeerd maar ik krijg dezelfde melding

Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024

CRiMiNaL

Witlof ^^

Maar je antwoord niet de vraag in welke tabel die zit, maar als ik het goed zie, probeer je met een subquery de tabel waarop deze query uitgevoerd moet worden te vinden?

code:
1
2
3
4
5
6
(SELECT COUNT(asglSubGenreId) AS in_subgenre FROM (
              SELECT asglSubGenreId, psglSubGenreId FROM acSubGenreLinks, prSubGenreLinks
              WHERE asglActieId = acId
              AND psglProductId = '1043'
              AND asglSubGenreId = psglSubGenreId) AS dummy 
            )

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • Edwinboss
  • Registratie: Juni 2008
  • Laatst online: 04-06 21:15
acId staat in de tabel "acties"

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik kan me niet aan de indruk onttrekken dat je met al deze subqueries veel lastiger zit te doen dan nodig is. Ik begrijp je datastructuur en vraag niet helemaal maar het ziet er behoorlijk lastig uit voor iets dat hooguit één of twee joins zou kunnen zijn.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024

CRiMiNaL

Witlof ^^

Zoals ik je query nu zie, heb je een sub query in een sub query, waarbij je in de 2e subquery een value van de main query probeert te gebruiken en ik vraag me af of dat in mysql kan. Je kan
code:
1
acties.acId
proberen, maar ik denk dat wat jij wilt inderdaad niet mogelijk is.

... MMORPG Addict.


Acties:
  • 0 Henk 'm!

  • Edwinboss
  • Registratie: Juni 2008
  • Laatst online: 04-06 21:15
NMe schreef op dinsdag 19 januari 2010 @ 12:32:
Ik kan me niet aan de indruk onttrekken dat je met al deze subqueries veel lastiger zit te doen dan nodig is. Ik begrijp je datastructuur en vraag niet helemaal maar het ziet er behoorlijk lastig uit voor iets dat hooguit één of twee joins zou kunnen zijn.
met simpele joins gaat het helaas niet werken

maar ik wou gewoon alles in mysql omdat het me mooier leek maar heb het nu opgelost dmv een extra query en wat php

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

(jarig!)
Die count constructie kun je vervangen door een exists, dat scheelt je het extra niveau en kun je waarschijnlijk gewoon linken naar je hoofdquery.

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • Edwinboss
  • Registratie: Juni 2008
  • Laatst online: 04-06 21:15
inderdaad, nog nooit gebruik van gemaakt maar het werkt _/-\o_
weer wat geleerd hartelijk dank allemaal

hier nog ff de query die ik nu gebruik
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT * FROM acties
  WHERE acDateStart <= DATE(NOW())
  AND acDateEnd >= DATE(NOW())
  AND acType = 0
  AND (acArtikelNr = (SELECT prArtikelNummer FROM producten
                        WHERE prId = '1043')
        OR acGenreId = (SELECT prGenreId FROM producten
                          WHERE prId = '1043')
        OR EXISTS (
              SELECT asglSubGenreId, psglSubGenreId FROM acSubGenreLinks, prSubGenreLinks
              WHERE asglActieId = acId
              AND psglProductId = '1043'
              AND asglSubGenreId = psglSubGenreId)
      )

Acties:
  • 0 Henk 'm!

Verwijderd

Edwinboss schreef op dinsdag 19 januari 2010 @ 14:31:
[...]


met simpele joins gaat het helaas niet werken

maar ik wou gewoon alles in mysql omdat het me mooier leek maar heb het nu opgelost dmv een extra query en wat php
Nou, zo te zien kan het nooit heel ingewikkeld zijn om dit netjes op te lossen met joins. Het is zo opgelost zo te zien, maar ik raadt je aan om het toch nog wat netter op te lossen. :Y

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

(jarig!)
Verwijderd schreef op dinsdag 19 januari 2010 @ 19:58:
Nou, zo te zien kan het nooit heel ingewikkeld zijn om dit netjes op te lossen met joins. Het is zo opgelost zo te zien, maar ik raadt je aan om het toch nog wat netter op te lossen. :Y
laat maar zien dan

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Op zich is dit prima met 3 left joins en eventueel een group by op te lossen, maar ik vraag me af of dat beter is - zowel qua overzichtelijkheid als qua performance. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1