remi sture Skrevet 6. september 2005 Skrevet 6. september 2005 (endret) Hallaisen, folkens! Jeg har problemer med en spørring jeg. Skal prøve å forklare problemet mitt enklest mulig. Under ser dere to av tabellene mine, som også utgjør problemet når jeg skal hente ut info. Som dere ser kan gruppeid'en i lag-tabellen være NULL (det er standard før en gruppe er valgt), men den kan også inneholde en gruppeid fra gruppe-tabellen (etter en gruppe er valgt i lag-tabellen). Problemet kommer når jeg vil hente ut både de lagene som har fått en gruppe, og dem som fortsatt inneholder NULL. Spørsmålet mitt er hvordan den siste AND-setningen skal se ut i spørringen. CREATE TABLE `gruppe` ( `gruppeid` smallint(5) unsigned zerofill NOT NULL auto_increment, `klasseid` smallint(5) NOT NULL default '0', `sesongid` smallint(5) NOT NULL default '0', `navn` smallint(3) NOT NULL default '0', PRIMARY KEY (`gruppeid`) ) TYPE=MyISAM COMMENT='Gruppeinfo her!' AUTO_INCREMENT=8; INSERT INTO `gruppe` VALUES (00001, 1, 1, 3); INSERT INTO `gruppe` VALUES (00002, 1, 1, 5); INSERT INTO `gruppe` VALUES (00005, 1, 1, 1); INSERT INTO `gruppe` VALUES (00006, 1, 1, 2); INSERT INTO `gruppe` VALUES (00007, 1, 1, 4); CREATE TABLE `lag` ( `lagid` smallint(5) unsigned zerofill NOT NULL auto_increment, `klubbid` smallint(5) NOT NULL default '0', `kontaktid` smallint(5) NOT NULL default '0', `klasseid` smallint(5) NOT NULL default '0', `gruppeid` smallint(5) unsigned zerofill default NULL, `sesongid` smallint(5) NOT NULL default '0', `navn` varchar(40) NOT NULL default '', `melding` text, `betalt` char(3) default 'Nei', PRIMARY KEY (`lagid`) ) TYPE=MyISAM COMMENT='Informasjon om hvert lag ligger her' AUTO_INCREMENT=22; INSERT INTO `lag` VALUES (00021, 5, 20, 18, NULL, 1, 'Vadmyra j grønn 97', '', 'Nei'); SELECT lag.lagid, lag.klubbid, klubb.klubbid, klubb.navn 'klubb', lag.kontaktid, kontakt.kontaktid, kontakt.navn 'kontakt', lag.gruppeid, gruppe.gruppeid, gruppe.navn 'gruppe', lag.navn 'lag', lag.sesongid, sesong.sesongid, sesong.navn 'sesong', lag.melding, lag.betalt, lag.klasseid, klasse.klasseid, klasse.navn 'klasse' FROM lag, kontakt, sesong, gruppe, klubb, klasse WHERE lag.sesongid = sesong.sesongid AND sesong.navn = '$_REQUEST[sesong]' AND lag.klubbid = klubb.klubbid AND lag.kontaktid = kontakt.kontaktid AND lag.klasseid = klasse.klasseid AND (lag.gruppeid = gruppe.gruppeid OR lag.gruppeid = NULL) Endret 6. september 2005 av remi sture
olona Skrevet 6. september 2005 Skrevet 6. september 2005 (endret) [..prøver igjen..] Poenger er at du vil ha alle lag, uavhengig om de har fått gruppe eller ei? Det høres ut som en typisk eksempel for et "outer join". Usikker på hvordan du gjør de i mysql men i oracle bruker du følgende notasjon: lag.gruppeid = gruppe.gruppeid (+) evntuelt lag LEFT OUTER JOIN gruppe Forklaring: EMP LEFT OUTER JOIN DEPT: take all records from the LEFT side table (EMP) and try to join them with records in DEPT. Any records in EMP not yet joined are also displayed with null entries for any DEPT columns EMP RIGHT OUTER JOIN DEPT: take all records from the RIGHT side table (DEPT) and try to join them with records in EMP. Any records in DEPT not yet joined are also displayed with null entries for any EMP columns EMP FULL OUTER JOIN DEPT: take all records from the left side table (EMP) and try to join them with records in DEPT. Any records in EMP not yet joined are also displayed with null entries for any DEPT columns. Any records in DEPT not yet joined are also displayed with null entries for any EMP columns. Endret 6. september 2005 av olona
remi sture Skrevet 6. september 2005 Forfatter Skrevet 6. september 2005 (endret) Takk for svar, jeg skal prøve meg fram jeg! Endret 6. september 2005 av remi sture
remi sture Skrevet 6. september 2005 Forfatter Skrevet 6. september 2005 Hm... jeg fikk ingen av dem til å fungere jeg...
olona Skrevet 6. september 2005 Skrevet 6. september 2005 Hva slags database er det? Dersom du vil vise alle "lag", uavhengig om de har gruppe eller ikke select l.* from lag l LEFT join gruppe g on (l.gruppeid = g.gruppeid ) Hvis det er mySQL: http://dev.mysql.com/doc/mysql/en/join.html
remi sture Skrevet 6. september 2005 Forfatter Skrevet 6. september 2005 Det er MySQL det er snakk om. Har du et konkret eksempel å komme med? Skjønte ikke så mye av den siden egentlig.
olona Skrevet 6. september 2005 Skrevet 6. september 2005 Hei. Kanskje det er meg som har misforstått? Men, dersom dette er en MySql database, og du skal ha ut alle lagene med gruppeinformasjon om de har det, så kan du gjøre som beskrevet - her følger eksempel. (ignorer dette om min antagelse er helt på jordet... Jeg la nå til: INSERT INTO `lag` VALUES (00022, 5, 20, 18, 00001, 1, 'tom jones', '', 'Nei'); Dersom jeg da kjører følgende spørring: select l.* from lag l LEFT join gruppe g on (l.gruppeid = g.gruppeid ) Så får jeg ut: agid klubbid kontaktid klasseid gruppeid sesongid navn melding betalt 00021 5 20 18 NULL 1 Vadmyra j grønn 97 Nei 00022 5 20 18 00001 1 tom jones Nei
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå