Gå til innhold

Problemer med MySQL-spørring!


Anbefalte innlegg

Skrevet (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 av remi sture
Videoannonse
Annonse
Skrevet (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 av olona
Skrevet

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...