Avatar billede claus_larsen Nybegynder
18. august 2004 - 12:09 Der er 6 kommentarer og
1 løsning

MySQL problem

Jeg har et problem.

På min hjemmeside har jeg tabellerne brugere, hold, holdtilmelding, kampe, og kamptilmelding.

Brugerne er tilmeldt forskellige hold. Kampene er linket til holdene, og kamptilmelding viser hvilke spillere der er tilmeldt en given kamp.

Jeg vil gerne

Jeg vil gerne liste de spillere der endnu ikke har tilmeldt sig eller frameldt sig til en given kamp. Altså de brugere som er tilmeldt hold X men ikke har tilmeldt sig (ikke har en post stående i tabellen kamptilmelding om den pågældende kamp)





Tabellerne:


#
# Struktur dump for tabellen `brugere`
#

CREATE TABLE `brugere` (
  `BrugerID` int(5) NOT NULL auto_increment,
  `Email` varchar(150) NOT NULL default '',
  `Password` varchar(50) NOT NULL default '',
  `VisKontaktInfo` int(1) NOT NULL default '0',
  `Status` int(1) NOT NULL default '0',
  `SidsteLogin` datetime NOT NULL default '0000-00-00 00:00:00',
  `Oprettet` date NOT NULL default '0000-00-00',
  `Behandlet` date NOT NULL default '0000-00-00',
  `Annonceret` int(1) NOT NULL default '0',
  `SpilNavn` varchar(100) NOT NULL default '',
  `Navn` varchar(100) NOT NULL default '',
  `Fodselsdato` date NOT NULL default '0000-00-00',
  `MSN` varchar(100) NOT NULL default '',
  `ICQ` varchar(25) NOT NULL default '',
  `Telefon` varchar(150) NOT NULL default '',
  `Billede` varchar(150) NOT NULL default '',
  `Vaaben` text NOT NULL,
  `Computer` text NOT NULL,
  PRIMARY KEY  (`BrugerID`)
) TYPE=MyISAM COMMENT='Brugere' AUTO_INCREMENT=155 ;


#
# Struktur dump for tabellen `hold`
#

CREATE TABLE `hold` (
  `HoldID` int(3) NOT NULL auto_increment,
  `SpilID` int(3) NOT NULL default '0',
  `Navn` varchar(100) NOT NULL default '',
  `KortHoldNavn` varchar(50) NOT NULL default '',
  `HoldFarve` varchar(50) NOT NULL default '',
  `Ansvarlig` int(5) NOT NULL default '0',
  `Information` text NOT NULL,
  `AntiCheat` text NOT NULL,
  `Billede` varchar(150) NOT NULL default '',
  `Status` int(1) NOT NULL default '0',
  PRIMARY KEY  (`HoldID`)
) TYPE=MyISAM PACK_KEYS=0 COMMENT='Hold' AUTO_INCREMENT=21 ;
   


#
# Struktur dump for tabellen `holdtilmelding`
#

CREATE TABLE `holdtilmelding` (
  `ID` int(9) NOT NULL auto_increment,
  `BrugerID` int(9) NOT NULL default '0',
  `HoldID` int(9) NOT NULL default '0',
  `Status` int(1) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) TYPE=MyISAM COMMENT='Tilmeldinger til holdende' AUTO_INCREMENT=127 ;
   

#
# Struktur dump for tabellen `kampe`
#

CREATE TABLE `kampe` (
  `MatchID` int(10) NOT NULL auto_increment,
  `KlanID` int(10) NOT NULL default '0',
  `DateTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `Hold` int(10) NOT NULL default '0',
  `KampType` int(3) NOT NULL default '0',
  `AntalSpillere` int(2) NOT NULL default '0',
  `Map1` varchar(250) NOT NULL default '',
  `Map2` varchar(250) NOT NULL default '',
  `SpilType` int(3) NOT NULL default '0',
  `Server` varchar(255) NOT NULL default '',
  `Password` varchar(255) NOT NULL default '',
  `Kommentarer` text NOT NULL,
  `Overskrift` varchar(250) NOT NULL default '',
  `Billede` varchar(250) NOT NULL default '',
  `ReminderSent` int(1) NOT NULL default '0',
  PRIMARY KEY  (`MatchID`)
) TYPE=MyISAM COMMENT='Kampe' AUTO_INCREMENT=325 ;
   


#
# Struktur dump for tabellen `kamptilmelding`
#

CREATE TABLE `kamptilmelding` (
  `ID` int(10) NOT NULL auto_increment,
  `KampID` int(10) NOT NULL default '0',
  `BrugerID` int(10) NOT NULL default '0',
  `Status` int(1) NOT NULL default '0',
  `DateTime` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`ID`)
) TYPE=MyISAM COMMENT='Tilmeldinger til kampe' AUTO_INCREMENT=263 ;
Avatar billede arne_v Ekspert
18. august 2004 - 13:30 #1
Prøv:

SELECT DISTINCT brugere.Navn
FROM ((brugere INNER JOIN holdtilmelding ON brugere.BrugerID=holdtilmedling.BrugerID)
INNER JOIN hold ON holdtilmedling.HoldID=hold.HoldID AND hold.navn='X')
LEFT JOIN kamptilmelding ON brugere.BrugerID=kamptilmelding.BrugerID
WHERE kamptilmelding.KampID IS NULL;
Avatar billede claus_larsen Nybegynder
18. august 2004 - 14:10 #2
Skal jeg ikke have kampens nummer med ind i det et sted!?

Jeg vil jo gerne tjekke hvem der f.eks. IKKE har givet besked om at kunne spille kampen Danmark Sverige. (ex. kampid 150)
Avatar billede arne_v Ekspert
18. august 2004 - 14:12 #3
Ah der var en betingels emere.

Så prøv:

SELECT DISTINCT brugere.Navn
FROM ((brugere INNER JOIN holdtilmelding ON brugere.BrugerID=holdtilmedling.BrugerID)
INNER JOIN hold ON holdtilmedling.HoldID=hold.HoldID AND hold.navn='X')
LEFT JOIN kamptilmelding ON brugere.BrugerID=kamptilmelding.BrugerID AND kamptilmelding.KampID=Y
WHERE kamptilmelding.KampID IS NULL;
Avatar billede arne_v Ekspert
18. august 2004 - 14:12 #4
Og bemærk at det er utestet.
Avatar billede claus_larsen Nybegynder
18. august 2004 - 14:16 #5
Jeg afprøver :)
Avatar billede claus_larsen Nybegynder
18. august 2004 - 14:59 #6
Laver du et svar? Lige bortset fra 2 tastefejl virker det perfekt!
Avatar billede arne_v Ekspert
18. august 2004 - 15:01 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester