/ 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
relationer i mysql?
Fra : Tonni Aagesen


Dato : 24-10-01 19:33

Hejsa NG,

Jeg har læst lidt om relationer på:
http://www.phpbuilder.com/columns/barry20000731.php3?page=1

Ud fra denne artikel har lavet følgende tabeller:

CREATE TABLE genreProfil(
ID INT NOT NULL,
G_ID INT,
P_ID INT,
FOREIGN KEY (G_ID) REFERENCES genre (ID),
FOREIGN KEY (P_ID) REFERENCES profil (ID),
PRIMARY KEY (ID));

CREATE TABLE genre(
ID INT NOT NULL,
name VARCHAR(255),
G_ID INT,
FOREIGN KEY (G_ID) REFERENCES genreProfil (ID),
PRIMARY KEY (ID));

CREATE TABLE profil(
ID INT NOT NULL,
username VARCHAR(255),
P_ID INT,
FOREIGN KEY (P_ID) REFERENCES genreProfil (ID),
PRIMARY KEY (ID));

Lad os sige at de har følegende data:

genreProfil
--------------------------------
| ID | G_ID | P_ID |
--------------------------------
| 1 | 1 | 1 |
--------------------------------
| 2 | 3 | 1 |
--------------------------------
| 3 | 2 | 2 |
--------------------------------
| 4 | 3 | 2 |
--------------------------------

genre
--------------------------
| ID | name |
--------------------------
| 1 | Pop |
--------------------------
| 2 | Blues |
--------------------------
| 3 | Jazz |
--------------------------

profil
--------------------------
| ID | username |
--------------------------
| 1 | Per |
--------------------------
| 2 | Lars |
--------------------------

Altså: Per hører Pop og Jazz, mens Lars hører Blues og Jazz.

Men jeg har to problemer:

1) hvad kan jeg bruge disse FOREIGN KEY til?
2) Jeg kan ikke greje at lave SQLsætning, der kan [1] vælge alle genre [2]
finde ud af om eks. Lars har valgt denne genre. Hvis vi tager Lars som eks.
skal mit output være noget i retningen af:

Find alle genre og markér genre hvis Lars tilmeldt.
------------------------------
| Pop | Ikke valgt |
------------------------------
| Blues | Valgt |
------------------------------
| Jazz | Valgt |
------------------------------

Er der nogen der kan hjælpe mig på vej?


--
Mvh
Tonni Aagesen
agent29@mail1.stofanet.dk



 
 
Kim Petersen (24-10-2001)
Kommentar
Fra : Kim Petersen


Dato : 24-10-01 20:55

"Tonni Aagesen" <use.my@signature.com> writes:

> Hejsa NG,
>
> Jeg har læst lidt om relationer på:
> http://www.phpbuilder.com/columns/barry20000731.php3?page=1
>
> Ud fra denne artikel har lavet følgende tabeller:
>
> CREATE TABLE genreProfil(
> ID INT NOT NULL,
> G_ID INT,
> P_ID INT,
> FOREIGN KEY (G_ID) REFERENCES genre (ID),
> FOREIGN KEY (P_ID) REFERENCES profil (ID),
> PRIMARY KEY (ID));
>
> CREATE TABLE genre(
> ID INT NOT NULL,
> name VARCHAR(255),
> G_ID INT,
> FOREIGN KEY (G_ID) REFERENCES genreProfil (ID),
> PRIMARY KEY (ID));
>
> CREATE TABLE profil(
> ID INT NOT NULL,
> username VARCHAR(255),
> P_ID INT,
> FOREIGN KEY (P_ID) REFERENCES genreProfil (ID),
> PRIMARY KEY (ID));
>
> Lad os sige at de har følegende data:
>
> genreProfil
> --------------------------------
> | ID | G_ID | P_ID |
> --------------------------------
> | 1 | 1 | 1 |
> --------------------------------
> | 2 | 3 | 1 |
> --------------------------------
> | 3 | 2 | 2 |
> --------------------------------
> | 4 | 3 | 2 |
> --------------------------------
>
> genre
> --------------------------
> | ID | name |
> --------------------------
> | 1 | Pop |
> --------------------------
> | 2 | Blues |
> --------------------------
> | 3 | Jazz |
> --------------------------
>
> profil
> --------------------------
> | ID | username |
> --------------------------
> | 1 | Per |
> --------------------------
> | 2 | Lars |
> --------------------------
>
> Altså: Per hører Pop og Jazz, mens Lars hører Blues og Jazz.
>
> Men jeg har to problemer:
>
> 1) hvad kan jeg bruge disse FOREIGN KEY til?

Kun til dokumentation i MySQL afaik

> 2) Jeg kan ikke greje at lave SQLsætning, der kan [1] vælge alle genre [2]
> finde ud af om eks. Lars har valgt denne genre. Hvis vi tager Lars som eks.
> skal mit output være noget i retningen af:

[1] select name from genre;

[2] select name from genre r, profil p,genreprofil pf
where p.username='lars' and p.P_ID=pf.ID and pf.G_ID=r.ID;

- dette finder dog kun de genrer som lars er tilmeldt - ikke dem som han
ikke er tilmeldt. Det bliver du nødt til at kombinere dig frem til.

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Tonni Aagesen (24-10-2001)
Kommentar
Fra : Tonni Aagesen


Dato : 24-10-01 21:14

"Kim Petersen" <kim@vindinggaard.dk> skrev i en meddelelse
news:n12gg6e2.fsf@localhost.localdomain...

> > 1) hvad kan jeg bruge disse FOREIGN KEY til?
>
> Kun til dokumentation i MySQL afaik

Så er eks. denne linje altså overflødig:
FOREIGN KEY (G_ID) REFERENCES genre (ID)

> > 2) Jeg kan ikke greje at lave SQLsætning, der kan [1] vælge alle genre
[2]
> > finde ud af om eks. Lars har valgt denne genre. Hvis vi tager Lars som
eks.
> > skal mit output være noget i retningen af:
>
> [1] select name from genre;
>
> [2] select name from genre r, profil p,genreprofil pf
> where p.username='lars' and p.P_ID=pf.ID and pf.G_ID=r.ID;
>
> - dette finder dog kun de genrer som lars er tilmeldt - ikke dem som han
> ikke er tilmeldt. Det bliver du nødt til at kombinere dig frem til.

Hmm... Det var ellers præcis dette jeg håbede på at kunne opnå - ØV!
Grunden til dette er, at når brugeren henter sin profil (i en form på en
hjemmeside) skal hans valgmuligheder være betinget af de genrer der findes i
tabellen "genre", samtidig med hans tidligere valg af genrer så stadig skal
være valgte. På denne måde kunne jeg nøjes med at tilføje en genre i
tabellen "genre", så ville alle bruger få den nye genre tilføjet i formen på
siden hvor de kan ændre sin profil.

Findes der så en anden måde måske?

--
Mvh
Tonni Aagesen
agent29@mail1.stofanet.dk



Kim Petersen (24-10-2001)
Kommentar
Fra : Kim Petersen


Dato : 24-10-01 21:31

"Tonni Aagesen" <use.my@signature.com> writes:

> "Kim Petersen" <kim@vindinggaard.dk> skrev i en meddelelse
> news:n12gg6e2.fsf@localhost.localdomain...
>
> > > 1) hvad kan jeg bruge disse FOREIGN KEY til?
> >
> > Kun til dokumentation i MySQL afaik
>
> Så er eks. denne linje altså overflødig:
> FOREIGN KEY (G_ID) REFERENCES genre (ID)

I MySQL er de - som sagt så vidt jeg ved - i andre SQL'er er de dog
meget vigtige - da de sørger for at du ikke kan slette en genre som
brugere er tilknyttet - uden fejl.
>
> > > 2) Jeg kan ikke greje at lave SQLsætning, der kan [1] vælge alle genre
> [2]
> > > finde ud af om eks. Lars har valgt denne genre. Hvis vi tager Lars som
> eks.
> > > skal mit output være noget i retningen af:
> >
> > [1] select name from genre;
> >
> > [2] select name from genre r, profil p,genreprofil pf
> > where p.username='lars' and p.P_ID=pf.ID and pf.G_ID=r.ID;
> >
> > - dette finder dog kun de genrer som lars er tilmeldt - ikke dem som han
> > ikke er tilmeldt. Det bliver du nødt til at kombinere dig frem til.
>
> Hmm... Det var ellers præcis dette jeg håbede på at kunne opnå - ØV!
> Grunden til dette er, at når brugeren henter sin profil (i en form på en
> hjemmeside) skal hans valgmuligheder være betinget af de genrer der findes i
> tabellen "genre", samtidig med hans tidligere valg af genrer så stadig skal
> være valgte. På denne måde kunne jeg nøjes med at tilføje en genre i
> tabellen "genre", så ville alle bruger få den nye genre tilføjet i formen på
> siden hvor de kan ændre sin profil.

Lav det dog i programmet ? Du udfører [1] for at kunne få alle genrer -
derefter [2] - nu ved du hvilke af [1] der skal være valgt ...

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Nis Jorgensen (25-10-2001)
Kommentar
Fra : Nis Jorgensen


Dato : 25-10-01 12:51

On 24 Oct 2001 21:55:17 +0200, Kim Petersen <kim@vindinggaard.dk>
wrote:

>
>[2] select name from genre r, profil p,genreprofil pf
> where p.username='lars' and p.P_ID=pf.ID and pf.G_ID=r.ID;
>
> - dette finder dog kun de genrer som lars er tilmeldt - ikke dem som han
> ikke er tilmeldt. Det bliver du nødt til at kombinere dig frem til.

SELECT name, (Not IsNull(username)) as Valgt
FROM (genre as r LEFT OUTER JOIN genreprofil as pf ON pf.G_ID=r.ID)
LEFT OUTER JOIN profil as p ON (p.P_ID=pf.ID and p.username = 'lars')

IsNull skal erstattes med den tilsvarende funktion fra mySQL. Men jeg
tvivler på at mySQL accepterer den anden join-klausul.

--
Nis Jorgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

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

Månedens bedste
Årets bedste
Sidste års bedste