Avatar billede tchami Nybegynder
04. august 2004 - 20:58 Der er 3 kommentarer og
1 løsning

Hjælp til join

Hej,

Jeg har to tabeller der ser således ud:

CREATE TABLE news (
  nid int(6) unsigned NOT NULL auto_increment,
  date datetime default NULL,
  PRIMARY KEY  (nid)
) TYPE=MyISAM;

CREATE TABLE news_content (
  id int(6) unsigned NOT NULL auto_increment,
  fk_nid int(6) default NULL,
  author varchar(255) default NULL,
  headline varchar(255) default NULL,
  teaser text,
  content text,
  language char(3) default NULL,
  amtread int(6) unsigned default '0',
  PRIMARY KEY  (id),
  UNIQUE KEY id (id)
) TYPE=MyISAM;

Lad os forestille os at der i "news"-tabellen ligger to records:

nid      date
----------------------------
1        2004-08-04 15:30:20
2        2004-08-03 12:22:34

I "news_content"-tabellen ligger følgende records:

id    fk_nid    language
------------------------
1    1        dk
2    2        de
3    2        uk
4    1        de
5    1        uk

Nu vil jeg så gerne hive alle records ud fra "news" tabellen og joine med de records i "news_content" tabellen hvor language er "dk", men hvis der ikke er nogen record i "news_content" tabellen at joine på skal den joine hvor language er "uk".

Altså vil jeg have fat i følgende to records fra "news_content" tabellen:
id    fk_nid    language
------------------------
1    1        dk
3    2        uk

Og hvis jeg ønskede at joine på language=de skulle følgende records fra "news_content" tabellen findes frem:
id    fk_nid    language
------------------------
2    2        de
4    1        de

Er der nogen der kan hjælpe?
Avatar billede arne_v Ekspert
04. august 2004 - 22:17 #1
Den tror jeg er svær.

Min bedste ide er:

SELECT *
FROM news,news_content
WHERE news.nid=news_content.nid AND (news_content.language=X OR news_content.language='uk')
ORDER BY news.id,news_content.language

og så lade din applikation skippe de rækker med 'uk', hvor der allerede har
været en 'dk' eller 'de' for samme id.
Avatar billede tchami Nybegynder
04. august 2004 - 22:25 #2
Hmm ok, det var lige umiddelbart også det jeg selv kom på, men håbede lidt det kunne gøres smartere :/
Avatar billede arne_v Ekspert
04. august 2004 - 22:57 #3
Der ville være visse muligheder i MS SQLServer eller MySQL 4.1.
Avatar billede arne_v Ekspert
11. september 2004 - 22:05 #4
OK ?
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