Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

Inner join

Anoniem
None
8 antwoorden
  • Hallo allemaal,

    ik zit met een probleempje waar hopelijk iemand mij mee kan helpen. Ik vermoed dat het niet zo ingewikkeld is, maar het lukt me maar niet.

    Ik heb een mysql db met twee tabellen.
    In de eerste tabel (tblusers) staat een waarde voor usSchool. In de tweede tabel (tblschool) staat met welke school de waarde overeenkomt.
    Nu heb ik een pagina gemaakt waarop de db uitgelezen wordt. Dit werkt prima, alleen laat de pagina nu de waarde van usSchool zien en niet de bijbehorende naam i.p.v. de waarde.

    Ik heb de volgende query gemaakt:
    [code:1:0ffb473874]
    if(!isset($_GET["sortby"])) {
    $sql = "SELECT * FROM tblusers ORDER BY usID";
    }
    else {
    $sql = "SELECT * FROM tblusers ORDER BY " . $_GET['sortby'];
    }
    $result = mysql_query($sql) or die(mysql_error());
    [/code:1:0ffb473874]

    Ik ben al bezig geweest met een INNER Join, maar dat lukt niet.
    Alvast bedankt voor de hulp!

    Groeten,
    Rob
  • Ik heb geen antwoord op je vraag, maar houd je wel rekening met SQL Injection? (Een vorm van hacken)

    Lees anders even het volgende: http://www.jonlee.ca/how-to-prevent-sql-injection-attacks/

    - Bas
  • [code:1:d900e5fd61]SELECT *
    FROM tblusers t
    INNER JOIN tblschool s ON s.id=t.id
    [/code:1:d900e5fd61]
  • Het is me nog niet helemaal duidelijk Marientje. Wat bedoel je met t en s? Ik heb die namen niet in mijn tabellen staan en nu ben ik het een beetje kwijt.

    Even een overzichtje van de tabel zoals ik die gebruik:

    tblschool bevat:
    - schoolID
    - schoolNaam

    aan ieder ID is een naam gekoppeld.

    tblusers bevat o.a.:
    - usSchool

    Nu wil ik in een overzichtspagina dat niet het getal uit usSchool getoond wordt, maar de naam van de school zoals ik die gedefinieerd heb in tblschool.

    Hopelijk kun je me nog eens helpen.
  • De [i:134411c238]t[/i:134411c238] en [i:134411c238]s[/i:134411c238] zijn een zogenaamde alias. Daarmee zorg je ervoor dat je in de rest van je query niet de volledige naam hoeft te gebruiken, maar alleen de alias. En dat kan zowel bij tables als bij columns. Bij joins wordt vaak de eerste letter (of x letters) van de tabel/objectnaam genomen. Dus [i:134411c238]s[/i:134411c238] voor tbl[u:134411c238]s[/u:134411c238]chool en [i:134411c238]u[/i:134411c238] voor tbl[u:134411c238]u[/u:134411c238]ser (marientje zal wel een vergissing hebben gemaakt).

    In jouw voorbeeld zijn de volgende 2 queries gelijk (en ook meteen een antwoord op je vraag):

    [code:1:134411c238]
    SELECT tbluser.*, tblschool.schoolNaam
    FROM tbluser, tblschool
    WHERE tbluser.usSchool = tblschool.schoolID
    [/code:1:134411c238]

    [code:1:134411c238]
    SELECT u.*, s.schoolNaam
    FROM tbluser u, tblschool s
    WHERE u.usSchool = s.schoolID
    [/code:1:134411c238]

    Persoonlijk vind ik de methode met de alias leesbaarder, maar dat is iets wat je zelf moet proberen.

    Ik raad je aan om een beginnerscursus SQL op te zoeken op internet en daar eens doorheen te lopen. Je mist nog wat elementaire kennis, maar dat moet met wat simpele oefeningen snel op te krikken zijn.
  • Dank Annie voor je antwoord. Het is me een stuk duidelijker geworden. Ik zal zeker ook nog een beginnerscursus doornemen.

    Nog wel een laatste vraag tot slot. Ik heb je tips direct gebruikt, maar het komt nog niet in de tabel zoals ik dat graag zou willen.

    Dit is in grote lijnen de code zoals ik die gebruik.

    [code:1:af52e0c21e]
    <?php
    ob_start();

    include_once("library/config.inc");

    if($_GET["cmd"]=="delete") {
    $sql = "DELETE FROM tblusers WHERE usID =" . $_GET["id"] . "";
    $result = mysql_query($sql) or die(mysql_error());
    }

    if(!isset($_GET["sortby"])) {
    $sql = "SELECT u.*, s.schoolNaam FROM tblusers u, tblschool s WHERE u.usSchool = s.schoolID ORDER BY usID";
    }
    else {
    $sql = "SELECT * FROM tblusers ORDER BY " . $_GET['sortby'];
    }
    $result = mysql_query($sql) or die(mysql_error());

    ?>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <script src="library/standard.js" type="text/javascript"></script>
    </head>
    <body>
    <!– Start inhoud webpagina –>
    <font face="Arial, Helvetica, sans-serif">
    <table width="100%">
    <tr>
    <td width="5%"></td>
    <td width="85%">
    <table cellpadding="2" cellspacing="0" border="1" align="left">
    <tr>
    <td><a href="docopen.php?sortby=usID" title="Sorteren op ID"><b>ID</b></a></td>
    <td><b>Voornaam</b></td>
    <td><a href="docopen.php?sortby=usAchternaam" title="Sorteren op achternaam"><b>Achternaam</b></a></td>
    <td><b>Adres</b></td>
    <td><b>Postcode</b></td>
    <td><a href="docopen.php?sortby=usPlaats" title="Sorteren op plaats"><b>Woonplaats</b></a></td>
    <td><b>Telefoonnummer</b></td>
    <td><a href="docopen.php?sortby=usSchool" title="Sorteren op school"><b>Basisschool</b></a></td>
    <td><b>Vriend</b></td>
    <td><b>Bewerken</b></td>
    </tr>
    <?php
    if (!$result) {
    echo "geen resultaten";
    } else {
    while ($row = mysql_fetch_array($result)) {
    $id = $row["usID"];
    $voornaam = $row["usVoornaam"];
    $achternaam = $row["usAchternaam"];
    $straat = $row["usStraat"];
    $nummer = $row["usNummer"];
    $postcode = $row["usPostcode"];
    $plaats = $row["usPlaats"];
    $telefoon = $row["usTelefoon"];
    $basisschool = $row["usSchool"];
    $vriend = $row["usVriend"];

    echo "<tr>";
    echo "<td>$id</td>";
    echo "<td>$voornaam</td>";
    echo "<td>$achternaam</td>";
    echo "<td>$straat $nummer</td>";
    echo "<td>$postcode</td>";
    echo "<td>$plaats</td>";
    echo "<td>$telefoon</td>";
    echo "<td>$basisschool</td>";
    echo "<td>$vriend</td>";
    echo "<td><a href=\"docopen.php?cmd=delete&id=$id\" onclick=\"return bevestig()\">verwijder</a></td>";
    echo "</tr>";
    }
    }
    ?>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    </font>
    <!– Einde inhoud webpagina –>
    </body>
    </html>

    <?php
    ob_end_flush();
    ?>
    [/code:1:af52e0c21e]

    Hopelijk kun je me nog wat verder helpen. Ik wil dus graag dat in die tabel in de kolom basisschool geen cijfers getoond worden, maar de namen van de scholen.
    Bedankt alvast!
  • Ik kan je code niet testen, dus onderstaande is even uit de losse pols (met het risico op syntaxfouten).

    [code:1:38b516151e]
    <?php
    ob_start();

    include_once("library/config.inc");

    if($_GET["cmd"]=="delete") {
    $sql = "DELETE FROM tblusers WHERE usID =" . $_GET["id"] . "";
    $result = mysql_query($sql) or die(mysql_error());
    }

    $sortby = isset($_GET["sortby"]) ? $_GET["sortby"] : "usID";

    $sql = "SELECT u.*, s.schoolNaam FROM tblusers u, tblschool s WHERE u.usSchool = s.schoolID ORDER BY " . $sortby;
    $result = mysql_query($sql) or die(mysql_error());

    ?>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <script src="library/standard.js" type="text/javascript"></script>
    </head>
    <body>
    <!– Start inhoud webpagina –>
    <font face="Arial, Helvetica, sans-serif">
    <table width="100%">
    <tr>
    <td width="5%"></td>
    <td width="85%">
    <table cellpadding="2" cellspacing="0" border="1" align="left">
    <tr>
    <td><a href="docopen.php?sortby=usID" title="Sorteren op ID"><b>ID</b></a></td>
    <td><b>Voornaam</b></td>
    <td><a href="docopen.php?sortby=usAchternaam" title="Sorteren op achternaam"><b>Achternaam</b></a></td>
    <td><b>Adres</b></td>
    <td><b>Postcode</b></td>
    <td><a href="docopen.php?sortby=usPlaats" title="Sorteren op plaats"><b>Woonplaats</b></a></td>
    <td><b>Telefoonnummer</b></td>
    <td><a href="docopen.php?sortby=usSchool" title="Sorteren op school"><b>Basisschool</b></a></td>
    <td><b>Vriend</b></td>
    <td><b>Bewerken</b></td>
    </tr>
    <?php
    if (!$result) {
    echo "geen resultaten";
    } else {
    while ($row = mysql_fetch_array($result)) {
    $id = $row["usID"];
    $voornaam = $row["usVoornaam"];
    $achternaam = $row["usAchternaam"];
    $straat = $row["usStraat"];
    $nummer = $row["usNummer"];
    $postcode = $row["usPostcode"];
    $plaats = $row["usPlaats"];
    $telefoon = $row["usTelefoon"];
    $basisschool = $row["schoolNaam"];
    $vriend = $row["usVriend"];

    echo "<tr>";
    echo "<td>$id</td>";
    echo "<td>$voornaam</td>";
    echo "<td>$achternaam</td>";
    echo "<td>$straat $nummer</td>";
    echo "<td>$postcode</td>";
    echo "<td>$plaats</td>";
    echo "<td>$telefoon</td>";
    echo "<td>$basisschool</td>";
    echo "<td>$vriend</td>";
    echo "<td><a href=\"docopen.php?cmd=delete&id=$id\" onclick=\"return bevestig()\">verwijder</a></td>";
    echo "</tr>";
    }
    }
    ?>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    </font>
    <!– Einde inhoud webpagina –>
    </body>
    </html>

    <?php
    ob_end_flush();
    ?>
    [/code:1:38b516151e]
  • Geniaal Annie! Het werkt uitstekend. Ik snap nu ook wat je bedoelt met alias.

    Bedankt!

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.