Har sett en del om det när jag googlat och sökt här på wF men inte lyckats förstå hur jag ska göra. Jag vill alltså gruppera mitt resultat efter ett fält som ibland kan vara tomt, rader som är tomma vill jag ändå hämta fram men inte gruppera. Så här alltså:
field1 field2 field3
1 val1 aaa
2 val2 bbb
3 val3
4 val4
5 val5 aaa
Kör jag en vanlig GROUP BY på field3 på det här så grupperas även de tomma fälten till en grupp. Hur kan jag få ut de raderna utan att gruppera dem?
Otestat, men kanske GROUP BY COALESCE(field3,field2) ?
COALESCE plockar ut de första värdet som inte är null. För de fält där field3 är null grupperas alltså raderna efter field2 (om det alls går att göra så vill säga.)
Tack för snabbt svar!
Men jag får det inte att funka, så här ser det ut (det är en Wordpress-tabell jag försöker hämta från):
SELECT COUNT(wposts.post_excerpt) AS iTotal,wposts.*
FROM wp_posts wposts
WHERE wposts.post_type = 'attachment' AND wposts.post_parent = '7' AND wposts.post_status != 'trash'
GROUP BY COALESCE(wposts.post_excerpt,wposts.ID)
HAVING (COUNT(wposts.post_excerpt) > 0)
ORDER BY wposts.ID ASC LIMIT 0, 12
Coalesce är förresten ett jäkla bra band också ;)
LarsGMedlem sedan dec. 200012 464 inlägg Ge exempel på datainnehåll och ditt förväntade resultat.
Värdet av
COUNT(wposts.post_excerpt)
blir noll om wposts.post_excerpt är null så därför tar du bort alla sådana poster. Varför har du med alla kolumner från tabellen när du gör group by på en av kolumnerna?
Jo alltså, post_excerpt är en text-sträng och alla poster som har samma textsträng vill jag bunta ihop och presentera som en mapp på en webbsida. Så ifall tabellen ser ut så här:
ID post_title post_excerpt
1 val1 aaa
2 val2 bbb
3 val3
4 val4 ccc
5 val5
6 val6 aaa
7 val7 bbb
8 val8 aaa
...så vill jag presentera det så här:
post_title post_excerpt iTotal
aaa 3
bbb 2
val3 0 eller 1
val4 ccc 0 eller 1
val5 0 eller 1
Sen kollar jag med PHP ifall iTotal är större än 1 så skrivs en mapp-ikon ut, annars skrivs post_title ut bara. Är du med?
Läste något om att man kan använda inner join, tror du att det behövs? I såna fall får jag plugga in mig på det.
LarsGMedlem sedan dec. 200012 464 inlägg select case when count(*) = 1 then min(post_title) end,
post_excerpt,
min(id) as minid
count(*) as iTotal
from wp_posts
where post_type = 'attachment'
and post_parent = 7
and post_status <> 'trash'
group by coalesce(post_excerpt,cast(ID as char(11))
order by minid
limit 12