Waarom kan ik niet filteren op IS NOT NULL in deze query
Maar met de volgende query krijg ik een error:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id,
MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) AS inslider
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
WHERE cnt.state = 1
AND f.value = 'ja'
AND inslider IS NOT NULL
GROUP BY f.item_id
ORDER BY f.item_id, inslider
cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id,
MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) AS inslider
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
WHERE cnt.state = 1
AND f.value = 'ja'
AND inslider IS NOT NULL
GROUP BY f.item_id
ORDER BY f.item_id, inslider
unknown column 'inslider' is wat ik dan krijg te zien. Ik las dat je in een where geen alias kunt gebruiken, maar mijn vraag is: hoe moet het dan wel?
Ik kan het niet vinden op internet.
Om de een of andere reden (wanneer ik die IS NOT NULL regel die een error geeft weghaal) haalt hij ook rijen op waarbij inslider de value NULL heeft.
En waar gaat deze query uberhaupt over? Misschien is er een andere manier om dit probleem op te lossen.
Hij heeft niet altijd een waarde, vandaar dat er soms een resultaat terugkomt dat NULL is. Ik wil graag die resultaten wegfilteren.
Gewijzigd op 31/01/2018 17:38:55 door - Ariën -
NB: je mist ook een heel stuk in GROUP BY, aangezien je daar alle kolommen moet noemen (niet zijnde aggregatie functies zoals MAX
Alternatief kan ook HAVING zijn in dit geval:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SELECT
cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id,
MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) AS inslider
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
WHERE cnt.state = 1
AND f.value = 'ja'
AND MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) IS NOT NULL
GROUP BY cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id
HAVING MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) IS NOT NULL
ORDER BY f.item_id, inslider
cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id,
MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) AS inslider
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
WHERE cnt.state = 1
AND f.value = 'ja'
AND MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) IS NOT NULL
GROUP BY cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id
HAVING MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) IS NOT NULL
ORDER BY f.item_id, inslider
Mogelijk dat je daar wel de alias kunt gebruiken in Mysql. Mag je zelf even testen.
HAVING kwam ik inderdaad ook al tegen, ik had daar nog nooit van gehoord dus het is even inlezen hoe dat nou precies werkt. De query boven geeft overigens de volgende error: Ongeldig gebruik van GROUP-functie
Gewijzigd op 31/01/2018 17:38:38 door - Ariën -
ben stukje in WHERE vergeten te wissen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT
cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id,
MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) AS inslider
FROM snm_fields_values f
JOIN snm_content cnt ON cnt.id = f.item_id
WHERE cnt.state = 1
AND f.value = 'ja'
GROUP BY
cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id
HAVING MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) IS NOT NULL
ORDER BY f.item_id, inslider
cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id,
MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) AS inslider
FROM snm_fields_values f
JOIN snm_content cnt ON cnt.id = f.item_id
WHERE cnt.state = 1
AND f.value = 'ja'
GROUP BY
cnt.id,
cnt.title,
cnt.introtext,
cnt.fulltext,
cnt.ordering,
cnt.images,
cnt.alias,
cnt.state,
f.item_id
HAVING MAX(CASE
WHEN f.field_id = 3 THEN f.value
END) IS NOT NULL
ORDER BY f.item_id, inslider
Deze werkt inderdaad. Bedankt, ik denk dat ik het snap. Zal het nog wel een paar keer vaker moeten gebruiken.
Gewijzigd op 31/01/2018 17:38:16 door - Ariën -
Je topic wordt daardoor onnodig lang (en onoverzichtelijk).
Quote (en zeker hele reacties) aub alleen als het toegevoegde waarde heeft.
Gewijzigd op 31/01/2018 17:32:41 door Obelix Idefix
Ik heb de quote even ingeknipt. Ik wil Snelle Jaap graag verzoeken om geen quotes van het laatst voorgaande bericht te plaatsen. Zo blijft het topic makkelijk leesbaar.