/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
sammenkæde flere rækker til felt My
Fra : Ryan Kristensen


Dato : 10-03-08 14:00

Hej.

Jeg forsøger at lave en database(MySQL) over personer, der skal
sammenkædes med hvilke hold, de er tilmeldt.
Problemet er, at personerne kan tilmeldes mere end ét hold.
Indtil videre har jeg lavet to databaser:
Databasen "personer" med to felter: navn og hold_id
Databasen "hold" med hold_id og holdtitel
Som jeg så kan sammenkæde (join) med feltet hold_id
Dette kan jeg bare ikke få til at give mulighed for at tilknytte flere
hold pr. person.

Er der en mulighed for at gøre dette?

--
Ryan Kristensen

 
 
Gert Krabsen (10-03-2008)
Kommentar
Fra : Gert Krabsen


Dato : 10-03-08 14:17

Ryan Kristensen skrev:
> Hej.
>
> Jeg forsøger at lave en database(MySQL) over personer, der skal
> sammenkædes med hvilke hold, de er tilmeldt.
> Problemet er, at personerne kan tilmeldes mere end ét hold.
> Indtil videre har jeg lavet to databaser:
> Databasen "personer" med to felter: navn og hold_id
> Databasen "hold" med hold_id og holdtitel
> Som jeg så kan sammenkæde (join) med feltet hold_id
> Dette kan jeg bare ikke få til at give mulighed for at tilknytte flere
> hold pr. person.
>
> Er der en mulighed for at gøre dette?


Du har brug for en mellem-tabel:


tabel person:
-------------
person_id   autoincrement
personnavn   long
osv.

tabel hold:
-----------
hold_id      autoincrement
holdnavn   long
osv.

tabel person_i_hold:
--------------------
person_i_hold_id autoincrement
person_id    long
hold_id    long




Ryan Kristensen (10-03-2008)
Kommentar
Fra : Ryan Kristensen


Dato : 10-03-08 14:50

On Mon, 10 Mar 2008 14:16:56 +0100, Gert Krabsen
<fjernkrabsen@fjernkrabsenfjern.dk> wrote:

>> Dette kan jeg bare ikke få til at give mulighed for at tilknytte flere
>> hold pr. person.
>> Er der en mulighed for at gøre dette?
>
>
> Du har brug for en mellem-tabel:

Ok, det giver jo meget god mening. Tusind tak for hintet.

Jeg har nu prøvet at sætte en sql-sætning sammen, så jeg f.eks. kan smide
"hold_1" ind, og få en liste ud hvor jeg kan se hvilke andre hold, der er
personer fra på dette hold.

Er der en pænere måde, at skrive det på end dette:

SELECT holdnavn FROM hold
WHERE hold_id = (SELECT hold_id
   FROM person_i_hold
   WHERE person_id = (SELECT person_id
      FROM person_i_hold
      WHERE hold_id =(SELECT hold_id
         FROM hold
         WHERE holdnavn='hold_1'))
         GROUP BY hold_id)

--
Ryan Kristensen

Leif Neland (10-03-2008)
Kommentar
Fra : Leif Neland


Dato : 10-03-08 22:29

Ryan Kristensen skrev:

> Jeg har nu prøvet at sætte en sql-sætning sammen, så jeg f.eks. kan
> smide "hold_1" ind, og få en liste ud hvor jeg kan se hvilke andre hold,
> der er personer fra på dette hold.
>
> Er der en pænere måde, at skrive det på end dette:
>
....

select distinct holdnavn from hold,
person_i_hold dette,
person_i_hold andet
where hold.hold_id=andet.hold_id
and andet.person_id=dette.person_id
and dette.hold_id='hold_1';

Bemærk at person_i_hold bruges to gange, med alias hhv 'dette' og 'andet'.

Leif



Ryan Kristensen (11-03-2008)
Kommentar
Fra : Ryan Kristensen


Dato : 11-03-08 20:59

On Mon, 10 Mar 2008 22:29:10 +0100, Leif Neland <leif@neland.dk> wrote:

>> Er der en pænere måde, at skrive det på end dette:
>>
> ...
>
> select distinct holdnavn from hold,
> person_i_hold dette,
> person_i_hold andet
> where hold.hold_id=andet.hold_id
> and andet.person_id=dette.person_id
> and dette.hold_id='hold_1';

Det virker perfekt. Mange tak for hjælpen.

--
Ryan Kristensen

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste