webForumDet fria alternativet

Group by och null-värden

5 svar · 730 visningar · startad av web00132

web00132Medlem sedan maj 2001797 inlägg
#1

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?

nitro2k01Medlem sedan aug. 20039 342 inlägg
#2

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.)

web00132Medlem sedan maj 2001797 inlägg
#3

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
#4

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?

web00132Medlem sedan maj 2001797 inlägg
#5

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
#6
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
130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)