webForumDet fria alternativet

Visa alla mappar oavsett om de är tomma eller ej.

Databaser & SQL

9 svar · 374 visningar · startad av Peeer

Medlem sedan mars 20025 907 inlägg
Frågan#1

När jag använder nedstående kod får jag ut alla meddelanden som besökaren har i sina mappar, men jag vill även ha ut de mapparna som inte innehåller några meddelanden. Hur gör jag det? Har trixat lite med outer join, men får inte till det alls.

select pm_subject, folder_name from pm_folders f, pm_mess m, pm p
where p.pm_uid = 1 and 
p.pm_current_id = m.pm_id and
p.pm_folder = f.folder_id
Medlem sedan mars 20025 907 inlägg
#2

Har trixat lite mer och knåpat ihop nedstående. Meningen är att den ska lista alla användarens mappar, samt antalet meddelanden i mapparna. Tyvärr så får jag samma fel som ovan (dvs. mappar utan meddelande visas inte alls). Hur gör jag?

SELECT folder_name, count( * ) AS Antal
FROM pm AS p
RIGHT OUTER JOIN pm_folders ON pm_folders.folder_uid = 1
WHERE pm_folders.folder_uid = 1 AND p.pm_folder = pm_folders.folder_id
GROUP BY folder_name LIMIT 0 , 30

Lite tabellstruktur kanske:

pm:
  pm_current_id int(11) NOT NULL default '0',
  pm_uid int(11) NOT NULL default '0',
  pm_folder int(11) NOT NULL default '0'

pm_folders:
  folder_id int(11) NOT NULL auto_increment,
  folder_name varchar(25) NOT NULL default '',
  folder_uid int(11) NOT NULL default '0',

pm_mess
  pm_id int(11) NOT NULL auto_increment,
  pm_mess text NOT NULL,
  pm_subject varchar(150) NOT NULL default '',
Medlem sedan dec. 20003 563 inlägg
#3

LEFT JOIN ?

Medlem sedan mars 20025 907 inlägg
#4

cyprys skrev:

LEFT JOIN ?

Ger exakt samma resultat :(
Om du nu bara menade att jag skulle byta ut right outer join mot left istället.

Medlem sedan dec. 200012 464 inlägg
#5

Flytta villkoren från where till on.

Medlem sedan mars 20025 907 inlägg
#6
SELECT folder_name, folder_id, count( * ) AS Antal
FROM pm AS p
RIGHT OUTER JOIN pm_folders ON p.pm_folder = pm_folders.folder_id
where pm_folders.folder_uid = 2
GROUP BY folder_name LIMIT 0 , 30

Nu funkar den nästan. Det enda som blir fel är om en mapp inte innehåller några meddelanden så står det 1 istället för 0. Annars så ser allt ut att stämma. :) Tips?

Medlem sedan dec. 200012 464 inlägg
#7

count( pm_folders.folder_id ) AS Antal

Medlem sedan mars 20025 907 inlägg
#8

Tyvärr, ingen skillnad. :(

r/ "count( p.pm_folder ) AS Antal" fungerade däremot. Tack för hjälpen. Du är en klippa!

Medlem sedan dec. 200012 464 inlägg
#9

Jo, du hade ju en right join.

count(*) innebär att alla värden, inklusive null räknas medans count(columnname) innebär att alla nullvärden ignoreras.

Medlem sedan mars 20025 907 inlägg
#10

Där ser man. Varje dag lär man sig något nytt. :)

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)