Avatar billede nemlig Professor
14. februar 2008 - 00:04 Der er 15 kommentarer og
2 løsninger

Find sammenkædede poster i samme tabel

Hej derude.
Jeg har 1 tabel, hvor der ligger nogle poster (personer).
Nogle af personerne (posterne) er kædet sammen ved at jeg har lavet et ekstra id-felt(ID_KAED), som er tildelt samme værdi som ID-feltet(ID) på den post, der kædes til og modsat.
Post 1 = ID[1], ID_KAED[4]
post 4 = ID[4], ID_KAED[1]

Hvordan definerer jeg SELECT, når jeg kun vil finde disse dobbelt poster og er det muligt at smide navne-felterne fra begge poster i samme Array, så jeg kan liste dem via While....
Avatar billede limemedia Nybegynder
14. februar 2008 - 03:31 #1
Har du et mysql dump vi kan lege med, jeg er ikke helt sikker på hvad du mener
Avatar billede supersquirrel Nybegynder
14. februar 2008 - 04:14 #2
altså..

select * from table1 where id='$id' AND ID_KAED='$id'

?
Avatar billede nemlig Professor
14. februar 2008 - 08:00 #3
Jeg har ikke noget dump, da jeg ikke aner hvordan Select skal laves.
Supersquirrel: Det er ikke løsningen - ID og ID_KAED aldrig har samme værdi i samme post.
I princippet skal der ske følgende:
Læs ID i Post 1 og find den post blandt de øvrige, som i feltet ID_KAED har ID's værdi fra post 1.
Læs derefter ID i Post 2 og find den post, som i feltet ID_KAED har ID's værdi fra post 2.
Osv.
Jeg kan godt finde ud af det ved at lave en while-løkke. Men det må kunne gøres mere elegant i et enkelt kald.
Avatar billede kabbak Professor
14. februar 2008 - 09:37 #4
I Acesss er det sådan

SELECT Tabel.ID, Tabel_1.ID_KAED
FROM Tabel AS Tabel_1 INNER JOIN Tabel ON Tabel_1.ID_KAED = Tabel.ID;
Avatar billede nemlig Professor
14. februar 2008 - 10:19 #5
kabbak: Ser interessant ud. Men da kædningen er dobbelt (de 2 poster, som er kædet sammen, kæder til hinanden), vil de så ikke komme med 2 gange i udtrækket.
Avatar billede bauerdata Nybegynder
14. februar 2008 - 11:08 #6
select * from table1 where id='$id' OR ID_KAED='$id'
Avatar billede nemlig Professor
14. februar 2008 - 11:25 #7
bauerdata: Det kan godt være at jeg ikke har fået det forklaret tydeligt nok, men du svarer på noget helt andet.
Avatar billede bauerdata Nybegynder
14. februar 2008 - 11:35 #8
select A.*
from table A, table B
where A.id = B.id_kaed
  and B.id = A.id_kaed
Avatar billede nemlig Professor
14. februar 2008 - 11:53 #9
Bauerdata: Jeg læser dit seneste svar sådan, at du regner med 2 tabeller.

Der er kun 1 tabel - en persontabel. Der er fx. 10 personer (poster) i tabellen. Hvis person1 er gift med person4, er der lavet en "kædning" mellem de 2 personer ved at det ID, som person1 har, er registreret under person4 i et ID_KAED felt - og modsat.
Jeg ønsker at lave et udtræk af de personer, som er "kædet" sammen, og hvis muligt vil jeg gerne have dem begge med i samme "array-row", så jeg kan liste dem sammen. Men det første er vigtigst.
Avatar billede bauerdata Nybegynder
14. februar 2008 - 12:00 #10
Nej det er den samme tabel som blot navngives A og B i selve select'en
Avatar billede nemlig Professor
14. februar 2008 - 12:21 #11
Ahha - så er vi ved at være der.
Nu vil jeg gerne have listet de 2 personer sammen.
Normalt vil jeg skrive echo $row['person1'] for at liste person 1.
Hvordan lister jeg den sammenkædede person (som også er person 1 - men i en anden post).
Og så får jeg dem jo dobbelt. (kan jo nok klare at sortere fra via PHP)
Kanb du hjælpe med dette også...... :-)
Avatar billede bauerdata Nybegynder
14. februar 2008 - 12:24 #12
De kommer i samme række.
Den sidste linie fjerne dubletter.

select A.*,B.*
from table A, table B
where A.id = B.id_kaed
  and B.id = A.id_kaed
  and A.id < B.id_kaed
Avatar billede bauerdata Nybegynder
14. februar 2008 - 12:25 #13
Du kan også bare skrive
select *
Avatar billede bauerdata Nybegynder
14. februar 2008 - 12:30 #14
Ups fejl i sidste linie
select A.*,B.*
from table A, table B
where A.id = B.id_kaed
  and B.id = A.id_kaed
  and A.id < A.id_kaed
Avatar billede nemlig Professor
14. februar 2008 - 12:32 #15
OK - super.
Men hvordan viser jeg de 2 person i samme post (person1 fra A og person1 fra B)
echo $row['a.person1'];
echo $row['b.person1'];

Forstår du hvad jeg mener?
Avatar billede bauerdata Nybegynder
14. februar 2008 - 12:53 #16
De er i samme række , kender ikke php så godt
select A.navn, " er gift med ", B.navn
from table A, table B
where A.id = B.id_kaed
  and B.id = A.id_kaed
  and A.id < A.id_kaed
Avatar billede nemlig Professor
14. februar 2008 - 22:53 #17
Hej Bauerdata. Jeg takker mange gange for dine input. Det hele fungerer perfekt nu.
Tusind tak for hjælpen.
Tak til jer andre også, men jeg giver bauerdata alle point, da det var hans bidrag, som løste min udfordring.
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