webForumDet fria alternativet

Hjälp med join

4 svar · 197 visningar · startad av Peeer

PeeerMedlem sedan mars 20025 907 inlägg
#1

Jag vill plocka ut alla listor som har LType = 1, samt de listor prenumerar på. Sen (om det är möjligt) så vill jag dessutom få någon form av markering på de listor man faktiskt prenumerar på.
Med koden nedan så vill jag alltså för userid = 10 få ut:

namn -  prenumerar
Pers testlista - 1
Övrigt - 0
Mer övrigt - 1
En annan hemlig lista - 1

Samma kod för userid=11 skulle ge
Pers testlista - 1
Övrigt - 1
Mer övrigt - 0
CREATE TABLE `mail_membership` (
  `UID` int(11) NOT NULL default '0',
  `LID` int(11) NOT NULL default '0',
  PRIMARY KEY  (`UID`,`LID`)
) TYPE=MyISAM COMMENT='Kopplar samman användare och listor';

#
# Dumping data for table `mail_membership`
#

INSERT INTO `mail_membership` (`UID`, `LID`) VALUES (10, 1);
INSERT INTO `mail_membership` (`UID`, `LID`) VALUES (10, 3);
INSERT INTO `mail_membership` (`UID`, `LID`) VALUES (10, 5);
INSERT INTO `mail_membership` (`UID`, `LID`) VALUES (11, 1);
INSERT INTO `mail_membership` (`UID`, `LID`) VALUES (11, 2);

CREATE TABLE `mail_lists` (
  `LID` int(10) unsigned NOT NULL auto_increment,
  `LName` varchar(255) NOT NULL default '',
  `LType` tinyint(3) unsigned NOT NULL default '1',
  PRIMARY KEY  (`LID`)
) TYPE=MyISAM COMMENT='Innehåller de olika maillistorna. LType avgör vilken typ av ' AUTO_INCREMENT=6 ;

#
# Dumping data for table `mail_lists`
#

INSERT INTO `mail_lists` (`LID`, `LName`, `LType`) VALUES (1, 'Pers testlista', 1);
INSERT INTO `mail_lists` (`LID`, `LName`, `LType`) VALUES (2, 'Övrigt', 1);
INSERT INTO `mail_lists` (`LID`, `LName`, `LType`) VALUES (3, 'Mer övrigt', 1);
INSERT INTO `mail_lists` (`LID`, `LName`, `LType`) VALUES (4, 'En jättehemlig lista', 2);
INSERT INTO `mail_lists` (`LID`, `LName`, `LType`) VALUES (5, 'En annan hemlig lista', 2);

Har försökt på alla sätt och vis, men får antingen bara ut de som man prenumerar på, eller alla som finns i list-tabellen. Hilfe :)

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select LName, 1
 from mail_lists ml join mail_membership mm
on ml.lid = mm.lid
union 
select Lname, case when mm.lid is null then 0 else 1 end
from mail_lists ml left join mail_membership mm
on ml.lid = mm.lid
where ltype = 1
PeeerMedlem sedan mars 20025 907 inlägg
#3

Hmm, den ger rätt resultat för UID = 11, men var ska jag mata in mitt UID? Provade nedanstående, men det gav exakt samma resultat som orginalkoden.

select LName, 1
 from mail_lists ml join mail_membership mm
on ml.lid = mm.lid
union 
select Lname, case when mm.lid is null then 0 else 1 end
from mail_lists ml left join mail_membership mm
on ml.lid = mm.lid
where ltype = 1 [b]and mm.UID = 10[/b]

Tack :)

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Jaså,det också. Det behövs i båda.

select LName, 1
 from mail_lists ml join mail_membership mm
on ml.lid = mm.lid 
and uid = 10
union 
select Lname, case when mm.lid is null then 0 else 1 end
from mail_lists ml left join mail_membership mm
on ml.lid = mm.lid
and uid = 10
where ltype = 1
PeeerMedlem sedan mars 20025 907 inlägg
#5

Underbart!
Stort tack till dig Lars, du är en klippa! :)

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