Avatar billede tobrukDk Novice
06. marts 2012 - 21:54 Der er 5 kommentarer og
1 løsning

INNER JOIN mellem 2 tabler problemer

hej

jeg er lige nu i gang med en opgave og det er sådan at at jeg har 3 tabler som skal join hinaden osv.. ;)

Books
id - uniket
titel
fk_forfatter - som skal join forfatter table
fk_genre - som skal join genre table
dato
fk_review - ved jeg så ikke lige nu ..


Forfatter
id
fornavn
efternavn


genre
titel
beskrivelse


der bliver skrevet sådan her i opgaven:
1. En semi dynamisk menu, hentet fra DB (Genrer).
2. Når der vælges menupunkt kommer der en liste med alle de bøger i den genre.
3. Man skal kunne vælge den enkelte bog og se de oplysninger, der er til den.

jeg gerne høre fra dig og gerne vide om du har nogle ide til det eller lign


Det er sådan at jeg har prøve at lave inner join fra books via FK_gerne over til gerne og via gerne_id




jeg har bygge det her op..


<?php

$mysql_hostname = "localhost";
$mysql_user = "root";
$mysql_password = "";
$mysql_database = "uge10_opgave";


$con = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
mysql_select_db($mysql_database, $con) or die("Could not select database");

// Prøv med 'latin1' hvis dette ikke virker.
  mysql_set_charset('utf8');
 
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Bog-taber</title>
<style type="text/css">
body {
    background:#999;
    font-family:"Courier New", Courier, monospace;
    font-size:12px;
    margin:0 auto;
}
#box {
    width:400px;
    background:#CCC;
    padding:2px;
    float:left;
    min-height:250px;
}
#box2 {
    width:150px;
    background:#333;
    padding:2px;
    float:left;
    min-height:250px;
}
h2 {
    font-size: 12px;
}
h2 a {
    text-decoration:none;
    color:#FFF;   
}
p a {
    text-decoration:none;
    color:#FFF;
}
#boxinfo {
    background:#333333;
    padding:5px;
    margin:5px;
    text-align:center;
}
#boxinfo:hover {
    background:#666;
    padding:5px;
    margin:5px;
    text-align:center;
   
    border-radius:5px;
    -moz-border-radius:5px;
    -webkit-border-radius:5px;
}
</style>
</head>
<body>


<div id="box">
<?php
$id = $_GET['id'];
$result = mysql_query("SELECT * FROM books INNER JOIN FK_gerne ON books.FK_gerne=gerne.gerne_id WHERE id = $id");
$num_rows = mysql_num_rows($result);
    if ($num_rows == 0) {
            echo "Der er intet lige nu";   
}       
while($row = mysql_fetch_array($result))
{
?>
<h1><?php echo $row['Titel'];?></h1>
<?php
}
?>   
</div>
<div id="box2">
<?php
$result = mysql_query("SELECT * FROM  `gerne` ORDER BY  `gerne`.`Titel` DESC");
$num_rows = mysql_num_rows($result);
                        if ($num_rows == 0) {
                                echo "Der ingen Bruger lige nu";   
                }       
        while($row = mysql_fetch_array($result))
                {
?>
    <div id="boxinfo">
    <h2><a href="bookinfo.php?genreid=<?php echo $row['id'];?>"><?php echo $row['Titel'];?></a></h2>
    <p><a href="bookinfo.php?genreid=<?php echo $row['id'];?>"><?php echo $row['beskrivelse'];?></a></p>
    <hr>
    </div>
   
    <?php
                }
    ?>
</div>

</body>
</html>


Du kan se billeder fra min database her :

http://jesperbok.dk/opgave/1.png
http://jesperbok.dk/opgave/2.png
http://jesperbok.dk/opgave/3.png


Håber du kan sige mig hvad jeg har gøre galt?
06. marts 2012 - 22:24 #1
Det man joiner er altid tabeller, i princippet således:

SELECT books.*, genre.beskrivelse FROM books JOIN genre ON books.genre = genre.id

Derved får du alle felter fra tabellen books plus genre beskrivelsen fra tabellen genre.

Eller SELECT books.*, genre.beskrivelse, forfatter.fornavn, forfatter.efternavn FROM books JOIN genre ON books.genre = genre.id JOIN forfatter ON books.forfatter = forfatter.id. 

Den giver dig alle felter fra books plus genre beskrivelsen plus forfatterens for og efternavn.

Jeg vil foreslå at du ændrer felternes navne i tabellen books til
id, titel, forfatter, genre, dato, review.

Og du skal være opmærksom på, at i mysql betyder JOIN og INNER JOIN det samme, så du kan lave koden kortere ved at bruge JOIN i stedet for INNER JOIN.

OG SÅ skal du være yderst varsom med dine navne.  Du har en tabel der hedder genre, men adskillige steder i koden bruger du gerne.  Så skal det gå galt.
Avatar billede tobrukDk Novice
06. marts 2012 - 23:07 #2
Ja okay håber det er okay at jeg svar dig i morgen på det ;) da jeg ikke kan overskue mere programmering i dag ;)
Avatar billede tobrukDk Novice
07. marts 2012 - 06:12 #3
Så du mener at jeg skal flytte forfatter over i books og så lave join i mellem books og gener
07. marts 2012 - 06:44 #4
#3, nej, dine tre tabeller ser fornuftige nok ud, jeg foreslår blot, at du ændre navnene på nogle af felterne, fordi et feltnavn såsom fk_forfatter kan forveksles med noget andet.  Altså disse tabeller (som jeg putter lidt data i for at illustrere.)  Jeg dropper review, fordi du ikke synes at bruge den endnu.

Books
id titel                    forfatter genre dato
1  En god dag    3          1  2012-01-01
2  Godnat kære 2          1  2012-01-02
3  Indien rejse  3            3  2012-01-03


Forfatter
id  fornavn  efternavn
1  Hans    Hansen
2  Jens    Jensen
3  Ole  Olsen
4  Anders  Andersen

Genre
id  beskrivelse
1    romaner
2    krimier
3    rejsebeskrivelser

Hvis du så vil se titlen på de bøger der er i en bestemt genre, såsom romaner, så kan du bruge denne query:

SELECT Books.titel FROM Books JOIN Genre ON Books.genre = Genre.id

hvilket, i dette eksempel, vil give

titel
En god dag
Godnat kære

Hvis du så vil vide alt om 'En god dag', inklusiv forfatterens navn, så siger du:

SELECT Books.id, Forfatter.fornavn, Forfatter.efternavn, Genre.beskrivelse, Books.dato
FROM Books
JOIN Forfatter ON Books.forfatter = forfatter.id
Join Genre ON Books.genre = Genre.id
WHERE Books.titel = 'En god dag'

hvilket skulle give dig

id  fornavn  efternavn beskrivelse dato
1  Ole  Olsen  romaner  2012-01-01
Avatar billede tobrukDk Novice
07. marts 2012 - 10:43 #5
jeg takker mange gerne for hjælpen og jeg er glad for at du er hjælpesom :)
07. marts 2012 - 11:08 #6
Men du må gøre dig umage med at formulere dig ikke sådan som det ser ud inde i hovedet, men på en logisk og forståelig måde, så folk har en mulighed for at forstå dig.  Der er to aspekter, den måde du strukturerer et problem på og det sprog du vælger til at forklare problemet.  Med hensyn til strukturen af et problem, fortæl kort hvad du prøver at gøre, vis den relevante kode, fortæl hvad du forventer der skal ske, og fortæl hvad der sker, inklusiv fejlmeldinger.  (Det værste man kan gøre er blot at sige "det virker ikke..")  Med hensyn til sprog, så prøv at tilnærme dig korrekte danske ord i korrekt dansk grammatik.  Det har du problemer med.  Det forstår jeg.  Man er ikke ansvarlig for hvordan man har det, for de muligheder man har fra naturens hånd.  Men man er selv ansvarlig for hvordan man tager det, hvad man gør med de muligheder man har. 

Jeg vil gerne være hjælpsom.  Men det kan jeg kun være, når jeg forstår hvad der skal hjælpes med.  Dette her spørgsmål var formuleret rimeligt forståeligt - det at du inkluderede problemformuleringen i skoleopgaven hjalp.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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