Inner Joins

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.:smiley:
Vielen Dank im Vorraus
webber979

Vielleicht hilft dir dieser Thread: http://www.html.de/datenbanken-z-b-mysql/42110-mysql-strucktur-der-abfrage-while-schleife.html

Dort habe ich etwas Ähnliches exemplarisch vorgemacht.

Danke schonmal aber genaus diesen Teil verstehe ich einfach nicht trotz dass der Syntax ja einfach ist.

SELECT
*
FROM
hoerspiele_tracks AS s
LEFT JOIN
hoerspiele AS st
ON
s.CDID = st.CDID
WHERE
st.url =‚" . $url . "‘
";

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“].“‘");[/PHP]

Natürlich wird die DB auch sachgemäß geöffnet sowie die Tabellen selbst.
Und dann halt abgespielt:
[PHP]<?php if( $kunstlername != ""){echo "

" . htmlspecialchars($ergebnis["kunstlername"]) . "

";};?>

<?php echo htmlspecialchars($ergebnis["stadt"]) ;?>, <?php echo htmlspecialchars($ergebnisland) ; ?>


<?php if( $ergebnis["alter"] != ""){echo'

. htmlspecialshars($ergebnis["alter"]) .

';};?>




Ich mache es als: <?php echo $ichmacheesals ?>
<?php if( $ergebnisniveau != ""){echo"Niveau :" . htmlspecialchars($ergebnisniveau) . "";};?>
<?php if( $ergebnistaetigkeit != ""){echo"T\&auml\;tig in/als :" . htmlspecialchars($ergebnistaetigkeit) . "";};?>[/PHP]

Geht es jetzt nicht mehr um Joins? Ich werde gerade aus dem Thread nicht so recht schlau.

Wieso ist das nicht Tabellen übergreifend.
Außerdem funktioniert es überhaupt?

Warum sollten mehrere Abfragen nicht funktionieren? Aber verknüpfen tut dein Code nichts.

Ja genau und wie kann ich die verwendeten Tabellen verknüpfen damit mein Code funktioniert?

So wie Du es in Beitrag #3 selbst geschrieben hast - so musst Du deine Tabellen auch verknüpfen.

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“]." ’ ")
    [/PHP]?

  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.

In diesem Thread geht es aktuell auch um Joins: http://www.html.de/php/42661-verschachtelte-mysql-abfrage-2.html

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.

  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:

Schau dir auf jeden Fall auch mal die unterschiede der JOIN-Typen an. Dadurch können dir auch Daten verloren gegangen sein.
Unterschied JOIN - LEFT JOIN - RIGHT JOIN - INNER JOIN

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 :wink: )
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.