• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Inner Joins

webber979

Neues Mitglied
Hallo Leute,
bin gerade dabei eine MYSQl DB zu normalisieren. Ich möchte halt das die beispiel: Feuerwehr_ID auf die ID der Tabelle Feuerwhr zugreift und den Datensatz ausließt. Ich habe erfahren, dass man das mit Inner Joins macht. Hab mich darüber schon informiert. MySQL - Joins -Inner Join

Jedoch habe ich es nicht ganz verstanden, weil ich glaube, dass bei mir ein Denkfehler ist darüber wie die ID(Feuerwehr_ID) jetzt genau bezeichnet werden muss um die Tabelle auch zu erwischen. Ich hab also Probleme mit dem Syntax.:neutral:
Könnt ihr mir eine leichter zu verstehende Seite zeigen oder einfach ein ganz kleines SCHEMA aufschreiben(bitte bitte mit reelen bezeichnungen, weil ich es mit pr.IS, pr_ID, Product.ID, blubb.ID, blubb.pr und sowas eben nicht ganz verstehen kann.:?

Ich hoffe ihr habt verständnis dafür.:-D
Vielen Dank im Vorraus
webber979
 
Werbung:
Werbung:
Funktioniert das?
PHP:
    <?php
$anredevari = $mysqli->query(" SELECT anrede_ID FROM benutzer WHERE nachname = '".$_SESSION["nachname"]."'");
    
$ergebnisanrede = $mysqli->query("
                            SELECT
                                  anrede
                            FROM
                                  anrede
                            WHERE
                                 ID = $anredevari "); 
$themavari = $mysqli->query(" SELECT thema_ID FROM benutzer WHERE nachname = '".$_SESSION["nachname"]."'");
    
$ergebnisthema = $mysqli->query("
                            SELECT
                                  thema
                            FROM
                                  thema
                            WHERE
                                 ID = $themavari "); 
$themavari = $mysqli->query(" SELECT thema2_ID FROM benutzer WHERE nachname = '".$_SESSION["nachname"]."'");

Natürlich wird die DB auch sachgemäß geöffnet sowie die Tabellen selbst.
Und dann halt abgespielt:
PHP:
<?php if( $kunstlername != ""){echo "<tr><h2>" . htmlspecialchars($ergebnis["kunstlername"]) . "</h2></tr>";};?>
        <tr> <h3><?php echo htmlspecialchars($ergebnis["stadt"]) ;?>,&nbsp;<?php echo htmlspecialchars($ergebnisland) ; ?></h3></tr>
        <?php if( $ergebnis["alter"] != ""){echo'<tr> <h2> . htmlspecialshars($ergebnis["alter"]) .  </h2></tr>';};?>
        </table>
        </div>
        <div class="rechtsboxprofiltextmusikspezifisches">
        <table border="0">
        <tr>Ich mache es als: <?php echo $ichmacheesals ?></tr>
        <?php if( $ergebnisniveau != ""){echo"<tr>Niveau :" . htmlspecialchars($ergebnisniveau) . "</tr>";};?>
        <?php if( $ergebnistaetigkeit != ""){echo"<tr>T\&auml\;tig in/als :" . htmlspecialchars($ergebnistaetigkeit) . "</tr>";};?>
 
Werbung:
Warum sollten mehrere Abfragen nicht funktionieren? Aber verknüpfen tut dein Code nichts.
 
Werbung:
Ich sag mal: Wenn du Code haben möchtest, poste bitte einen importierbaren SQL-Dump mit Testdaten und eine genau Beschreibung dessen, was du inhaltlich erreichen möchtest.
 
1. Wäre dieser Code richtig
PHP:
 $anredevari = $mysqli->query("select anrede from anredetabelle left join (anrede_ID) on (select anrede_ID from benutzer) where $nachname = '".$_SESSION["nachname"]." ' ")
?

2. Was bringen inner joins wirklich?

3. Gehören sie zur Normalisierung dazu oder reichen Tabellen die nur ID's beinhalten?

Danke im Voraus
alex
 
Nein, der Code ist nicht richtig. Aus 2 Gründen:

a) Eine Tabelle anrede_ID gibt es doch sicher nicht. Das ist der Name der Spalte in der Tabelle. Du musst hier also den Tabellennamen nennen, nicht die Spaltenbezeichnung.

b) Die where-Bedingung soll sicherlich die auf die Spalte nachname verweisen, nicht $nachname.

INNER JOINs entsprechend bei MySQL dem Einbinden von Tabellen per FROM und WHERE in einer Bedingung. Ist inhaltlich wie strukturell das Selbe. Bei anderen Datenbanksystemen (wie Oracle) hat dies auch Performance-Gründe, imho bei MySQL eher seltener.

Die Normalisierung bezieht sich auf die Datenbankstruktur, nicht auf Statements die man auf diesen ausführt.
 
Werbung:
Also brauch ich für eine Normalisierte Datenbank keine Inner Joins, sondern ich kann das ganze auch mit meinem bereits gezeigtem Code über zwei Mysql abfragen machen, richtig?
Ist der wenigstens richtig.
 
Der in #11? Es scheint hier im Forum irgendwie Mode zu sein, weitere SELECT-Anfragen in JOINs zu schreiben. Mir erscheint das völlig sinnfrei.
 
Werbung:
1) Nein ich meine den in #4. Ist der richtig?

2) Wie so ist es denn sinnlos mehrere selects zumachen?
Wie soll der Join denn sonst funktionieren?
 
Die Antwort auf alle Fragen ist: Syntax und Funktionsweise folgen festen Regeln. Das kann nicht einfach ausgedacht werden.

Ein Beispiel, wie Joins geschrieben werden, habe ich verlinkt. Ansonsten lässt sich das aber auch anderswo im Web nachlesen. Dir fehlt jedenfalls jedes grundlegende Wissen zu dem Thema. Annahmen auf der Basis müssen falsch sein.

In #4 vergisst du den Schritt, die konkreten Datensätze aus dem Result set abzuholen. Sieh dir das erste Beispiel hier an:

- PHP: mysqli_result::fetch_row - Manual
 
Werbung:
Alles klar Leute,
danke schonmal an alle,
also Joins sind nichts für Anfänger aber trotzdem leicht zu benutzen(Danke nochmals für den Link mermhaus ;) )
In meinem Fall müssen sie nicht umbedingt Sinn machen.

Zu dem Befehl
while ($row = $result->fetch_row()) {
}

Ich hab leider vergessen wozu man den braucht. Kann jemand das nochmal ganz kurz erwähnen? Danke!
 
Ich habe dir die entsprechende Seite der Anleitung sogar verlinkt…

Leute, klickt Links an. Das ist echt nicht mehr witzig.
 
Zurück
Oben