Avatar billede 0verwrite Nybegynder
13. januar 2003 - 12:16 Der er 7 kommentarer

Left join eller?

jeg har lidt relations problemer *phyh*

"design" (db1) struktur:
des_id
navn

"kategori" (db2) struktur:
kat_id
navn

"kategori_relation" (db3) struktur:
rel_id
design_id
kategori_id


Jeg vil selecte navn fra "design" (db1) HVIS "kategori_relation.kategori_id" (db3) IKKE er = '37'

problemet er at det ikke er alle i "design" (db1) der har en row i "kategori_relation" (db3) og den skal selecte 25 rows (så jeg kan ikke lave en if efter selecten)

noget a'la

SELECT design.navn FROM design LEFT JOIN kategori_relation ON kategori_relation.design_id = design.des_id LIMIT 0,25

...ja det er nok dårligt forklaret *yikes*, men prøv om i kan finde hoved og hale i det, eller sig hvordan jeg lige skal forklare det nemmest ;)
Avatar billede 0verwrite Nybegynder
13. januar 2003 - 12:19 #1
i min select mangler der så bare hvordan den skal sorter alle design.navn fra hvis den finder en kategori_relation.kategori_id = '37'
Avatar billede websmith Nybegynder
13. januar 2003 - 12:34 #2
Hvad med
-------------------
select design.navn from design d, kategori k, kategori_relation kr
where d.des_id=kr.design_id and kr.kategori_id=k.kat_id and k.kat_id !='37'
union
select design.navn from design d
left join kategori_relation on design.des_id=kategori_relation.design_id AND
kategori_relation.design_id=NULL
-------------
Det skulle gerne fungere
OG selecte alle navne fra design, som ikke har kategorien 37, og alle de designs som slet ikke har nogen kategori.

Prøv det og lad mig høre. Jeg har ikke lige en mysql her på min pind :)
Avatar billede 0verwrite Nybegynder
13. januar 2003 - 12:56 #3
Avatar billede 0verwrite Nybegynder
13. januar 2003 - 13:01 #4
...kender ikke lige den union (hvad gør den btw.) ?
Avatar billede 0verwrite Nybegynder
13. januar 2003 - 14:10 #5
...Har kun mysql version 3.23.54 (tror ikke den understøtter union) findes der andre metoder istedet?
Avatar billede websmith Nybegynder
14. januar 2003 - 10:09 #6
Hmm

En union er en metode til at lægge to record sets sammen.
Alternativt kan du oprette en temporær table

alá

Create temporary table temp(name char(254)) TYPE=MyISAM

insert into temp(name)
select design.navn from design d, kategori k, kategori_relation kr
where d.des_id=kr.design_id and kr.kategori_id=k.kat_id and k.kat_id !='37'

insert into temp(name)
select design.navn from design d
left join kategori_relation on design.des_id=kategori_relation.design_id AND
kategori_relation.design_id=NULL

select * from temp

Dvs. på denne måde skal du køre lidt flere sætninger, men skulle gerne kunne det samme :O

Jeg håber det kommer til at fungere for dig.
Avatar billede websmith Nybegynder
14. januar 2003 - 10:11 #7
Eller nok bedre. brug varchar(254), den er ikke en fast længde.
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