2 Velden koppelen aan 1 veld (genres)
ik zit met een left join probleempje denk ik...
Ik heb een hoofdtabel: films, deze bevat: genre1, genre2,
en ik heb een tabel: film_genres, met kolom: id, omschrijving
Nu wil ik genre1.id, en genre2.id koppelen, en daarvan de omschrijving ophalen.... vervolgens moet dit gekoppeld worden met CONCAT...
maar het lukt me niet eens om de omschrijvingen op te halen... genre1 was geen probleem, maar genre2 erbij ophalen wil niet zoals ik wil...
Code (php)
1
2
3
4
2
3
4
SELECT films.titel, films.omschrijving, films.speelduur, films.gezien, films.in_bezit, films_genre.omschrijving
FROM films, films_genre
LEFT JOIN films_genre ON films.genre_id1 = films_genre1.id
LEFT JOIN films_genre ON films.genre_id2 = films_genre2.id
FROM films, films_genre
LEFT JOIN films_genre ON films.genre_id1 = films_genre1.id
LEFT JOIN films_genre ON films.genre_id2 = films_genre2.id
Dit is om 1 genre op te halen:
Code (php)
1
2
3
2
3
SELECT films.titel, films.omschrijving, films.speelduur, films.gezien, films.in_bezit, films_genre.omschrijving AS omschrijving1, films_genre.omschrijving AS omschrijving
FROM films
LEFT JOIN films_genre ON films.genre_id1 = films_genre.id
FROM films
LEFT JOIN films_genre ON films.genre_id1 = films_genre.id
wie oh wie heeft de gouden tip :P
Soort van gouden regel: Als je meerdere kolomnamen met een nummer gaat aanmaken ben je fout bezig.
Aparte tabel met genres.
Koppeltabel films_genres
Genres apart ophalen.
edit: En toch help ik even, de tabel(len) van de LEFT JOIN moeten niet in de FROM.
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
en dan heb ik nog de tabel met films, waarbij je 2 genres kunt kiezen. deze genres hebben een ID, en deze moeten dan weer gekoppeld worden aan de ID's uit de genres tabel....
niet zo verkeerd toch??
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
films
-----
id INT PK
name VARCHAR
description TEXT
genres
-----
id INT PK
name VARCHAR
films_genres
------
film_id INT
genre_id INT
-----
id INT PK
name VARCHAR
description TEXT
genres
-----
id INT PK
name VARCHAR
films_genres
------
film_id INT
genre_id INT
edit: Excuus, bedacht het me verkeerd. De query in de while loop is wel nodig...
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
als je wat gaat hernoemen zou het dan niet werken?
want volgens mij krijg je nu een redelijk uitgebreide query?
en als ik films wil opslaan moe tik ook in 2 tabellen wat opslaan?
Aldus jou:
films
1 filmpje1 blablabla
2 filmpje2 blablabla
genres
123 actie
324 avontuur
435 oorlog
film_genres
1 123
1 324
2 435
nu heeft film 1 Actie en avontuur,
en film 2 oorlog
zie ik het zo goed?
*edit
dit werkt inderdaad nog net iets fijner, ik moet alleen wel m'n voorkant wat aanpassen, en queries aanpassen, maar ik kan nu eventueel net zoveel genres koppelen als ik wil...
Bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Leon Kunst
Dat het nu meer typwerk voor je site is maakt niet uit, want daarna levert het alleen maar op. Door de sleutels win je namelijk snelheid in je database.
Nu zit ik alleen nog even te stoeien met de query om de namen op te halen horend bij de gekoppelde genre_id's
Ik moet uiteindelijk 2 losstaande queries hebben
- Huidige genres_id's + naam van meegegeven ID van de film ophalen
(dus, ik vraag film 2 op, en dan wil ik de genre_id's + genre_namen hebben.
- Alle genre_id's en genre_namen ophalen...
Maar ik zit er al een tijd mee te stoeienn, en krijg het niet fatsoenlijk voor elkaar, doordat ik 3 tabellen moet koppelen...
Wie heeft er een idee???
thx alvast!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
$films_sql = "SELECT id, title, regiseur, release_date
FROM films
'ORDER BY title ASC;";
$genres_sql = "SELECT g.id AS id, g.name AS name, fg.film_id AS film_id
FROM films_genres fg
LEFT JOIN genres g ON g.id = fg.genre_id;";
if(($genres_result = mysql_query($genres_sql)) !== false) {
if(mysql_num_rows($genres_result) > 0) {
while($genre = mysql_fetch_assoc($genres_result)) {
$genres[$genre['film_id']] = $genre;
}
} else {
$genres = array();
}
} else {
echo mysql_error(); // Or log to file
}
if(($films_result = mysql_query($films_sql)) !== false) {
echo '<table><tr><th>ID</th><th>Titel</th><th>Regiseur</th><th>Genres</th></tr>';
if(mysql_num_rows($films_result) > 0) {
while($film = mysql_fetch_assoc($films_result)) {
if(!empty($genres[$film['id']])) { $genre_list = array();
foreach($genres[$film['id']] as $genre)
$genre_list[] = '<a href="genre.php?id='.$genre['id'].'">'.$genre['name'].'</a>';
} else { $genre_list = array('Geen genres'); }
echo '<tr>
<td>'.$film['id'].'</td>
<td>'.$file['title'].'</td>
<td>'.$film['regiseur'].'</td>
<td>'.join('<br />',$genre_list).'</td>
</tr>';
}
} else {
echo '<tr><td colspan="4">Geen films</td></tr>';
}
} else {
echo mysql_error(); // Or log to file
}
[/code]
$films_sql = "SELECT id, title, regiseur, release_date
FROM films
'ORDER BY title ASC;";
$genres_sql = "SELECT g.id AS id, g.name AS name, fg.film_id AS film_id
FROM films_genres fg
LEFT JOIN genres g ON g.id = fg.genre_id;";
if(($genres_result = mysql_query($genres_sql)) !== false) {
if(mysql_num_rows($genres_result) > 0) {
while($genre = mysql_fetch_assoc($genres_result)) {
$genres[$genre['film_id']] = $genre;
}
} else {
$genres = array();
}
} else {
echo mysql_error(); // Or log to file
}
if(($films_result = mysql_query($films_sql)) !== false) {
echo '<table><tr><th>ID</th><th>Titel</th><th>Regiseur</th><th>Genres</th></tr>';
if(mysql_num_rows($films_result) > 0) {
while($film = mysql_fetch_assoc($films_result)) {
if(!empty($genres[$film['id']])) { $genre_list = array();
foreach($genres[$film['id']] as $genre)
$genre_list[] = '<a href="genre.php?id='.$genre['id'].'">'.$genre['name'].'</a>';
} else { $genre_list = array('Geen genres'); }
echo '<tr>
<td>'.$film['id'].'</td>
<td>'.$file['title'].'</td>
<td>'.$film['regiseur'].'</td>
<td>'.join('<br />',$genre_list).'</td>
</tr>';
}
} else {
echo '<tr><td colspan="4">Geen films</td></tr>';
}
} else {
echo mysql_error(); // Or log to file
}
[/code]
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
Ik vond het al apart inderdaad...
Ik zit nu op m'n werk, heb hier helaas geen toegang tot m'n database, maar ik zal je script alvast implementeren. Bedankt voor alle moeite in ieder geval!
Ik laat nog even weten of het werkt of niet...
*edit:
Na wat aanpassen etc werkt het, zeer fijn overzichtje wordt het, thx!
Gewijzigd op 01/01/1970 01:00:00 door Leon Kunst