Antworten auf deine Fragen:
Neues Thema erstellen

Mehrfach LEFT JOIN??

declaudi

Nicht mehr ganz neu hier

Hey ho,

ich habe leider wieder ein Problem. Und zwar möchte ich gern über ein LEFT JOIN mehrere Tabellen verbinden. Ich versteh aber die ganzen CODES die ich so im Netz finde nicht.

Ein einfaches würde ja z.B. so aussehen:

$sql = "SELECT adressen.id, Vorname, Name, Str, Hausnummer, Mail, Website, kategorie.Kategorie, Notizen FROM adressen LEFT JOIN kategorie ON adressen.Kategorie = kategorie.id";

und nun wollte ich es gern für mehrere Kategorien ausgeben wollen.

Vielleicht so was da:

$sql = "SELECT adressen.id, Vorname, Name, Str, hausnummer.Hausnummer, Mail, Website, kategorie.Kategorie, Notizen FROM adressen LEFT JOIN kategorie ON adressen.Kategorie = kategorie.id LEFT JOIN hausnummer ON adressen.Hausnummer = hausnummer.id";

Ist sicher nicht gerade das beste und interessanteste Bsp., aber ich hoffe ihr versteht was ich meine! Und ich bin mir auch nicht sicher ob ich richtig denke. Möchte gern alles verbinden miteinander!

Vielen Dank erstmal schon!
 

SpieleHolger

Nicht mehr ganz neu hier

AW: Mehrfach LEFT JOIN??

Nö, verstehe nicht so ganz was du meinst...

Der zweite SQL sieht ok aus, warum auch immer jemand Hausnummern in einer separaten Tabelle führen möchte...

Bring doch ein konkretes Beispiel, das du wirklich brauchst.
 

declaudi

Nicht mehr ganz neu hier

AW: Mehrfach LEFT JOIN??

Mmh keine Ahnung. Da das Original

$sql = "SELECT fotoarchiv.id, Bildnr, Bildvorschau, Titel, Genre, Datum, Bildgroesse, Fotograf, Notizen FROM fotoarchiv LEFT JOIN fotograf ON fotoarchiv.Fotograf=fotograf.id ORDER BY Titel ASC, Genre ASC";

oder

$sql = "SELECT fotoarchiv.id, Bildnr, Bildvorschau, Titel, genre.Genre, Datum, bildgroesse.Bildgroesse, Fotograf, Notizen FROM fotoarchiv LEFT JOIN fotograf ON fotoarchiv.Fotograf=fotograf.id ORDER BY Titel ASC, Genre ASC";
 

SpieleHolger

Nicht mehr ganz neu hier

AW: Mehrfach LEFT JOIN??

Mehrere Joins in einem SQL sind auch nicht viel anders als ein Join:

SELECT
A.a, A.b, B.a, B.b, C.a, C.b
FROM
A
INNER JOIN B ON A.x = B.y
INNER JOIN C ON B.j = C.k

Pro zusätzlicher Tabelle ein JOIN, im ON die Verknüpfung der zwei Spalten der beteiligten Tabellen.

Brauchst Du überhaupt einen Left-JOIN oder reicht Dir nicht ein INNER JOIN?

Hier ein paar Grundlagen zu JOINS in SQL: Mit JOIN zwei Tabellen zu einer virtuellen Tabelle kombinieren
 

declaudi

Nicht mehr ganz neu hier

AW: Mehrfach LEFT JOIN??

Naja das weiß ich eben auch nicht so genau ob vielleicht ein INNER JOIN besser ist.

Habe meine Tabelle in die ich mittlerweile Datensätze über ein Eingabeformular eintragen/hochladen kann. Nun möchte ich das man diese Datensätze auf der Ausgabeseite in Form einer Tabelle löschen und später auch ändern(updaten) kann. Das löschen der Datensätze versuche ich gerade mittels for und while zu lösen.

Ich weiß eben auch immer nicht so genau nach welchen Kriterien ich genau entscheiden soll?! Mach das noch nicht so lang und ich begreif es auch noch nicht so ganz das ich es im Schlaf machen könnte.

Da ist erstmal mein Script zur Ausgabeseite:

PHP:
    <?php
    session_start();

         setcookie("besuch", "ja");
         setcookie("bn", "$_POST[bn]", time()+86400*30);
?>
<DOCTYPE HTML PUPLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
             <title>Ausgabe Fotoarchiv</title>

                 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"></meta>
        <meta name="robots"  content="index, follow"></meta>

                 <link rel="stylesheet" type="text/css" href="css/style.css">
         </head>
         <body>
                 <?php if ($_SESSION['login']!="eingeloggt" ) { ?>

                <h1>Bitte geben Sie Ihre Daten ein!</h1>
                 <div id="formular"><br/>
                 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
                                    <table>
                                    <tr>
                                        <td>Benutzernamen</td>
                                         <td><input color="#000000" type="text" name="bn" size="15" maxlength="20" /></td>
                                    </tr>
                                    <tr>
                                        <td>Password:</td>
                                         <td><input color="#000000" type="text" name="pw" size="15" maxlength="20" /></td>
                                    </tr>
                                 </table>

                                 <p align="right">
                                     <input type="submit" value="Senden" name="Absenden"/><br/><br/>
                                 </p>
                 </div>

                 <?php
                 }else{
                 ?>

                 <div id="formular"><br/>
                 <h2 style="color:#8fbc8f"><i>FOTOARCHIV! ;)</i></h2>
                     <table border="2">
                     <?php
                         include("inc/fotoarchiv_database.inc.php");

                         $pfad = "img/";

                         $sql = "SELECT fotoarchiv.id, Bildnr, Bildvorschau, Titel, genre.Genre, Datum, bildgroesse.Bildgroesse, fotograf.Name FROM fotoarchiv LEFT JOIN genre ON fotoarchiv.Genre = genre.id LEFT JOIN bildgroesse ON fotoarchiv.Bildgroesse = bildgroesse.id LEFT JOIN fotograf ON fotoarchiv.Fotograf = fotograf.id ORDER BY Titel ASC, Genre ASC";

                         echo $sql;

                         $result = mysql_query($sql);

                             $row = mysql_fetch_assoc($result);
                             echo "<tr>";
                                 foreach($row as $key => $value){
                                 echo "<th>".$key."</th>";
                                 }
                                 echo "</tr>\n";

                                 $result = mysql_query($sql);

                         while ($row = mysql_fetch_assoc($result)){

                             echo "<tr>";
                                 echo "<td>".$row[Bildnr]."</td>";
                                 echo "<td><img src=\"".$pfad.$row[Bildvorschau]."\"></td>";
                                 echo "<td>".$row[Titel]."</td>";
                                 echo "<td>".$row[Genre]."</td>";
                                 echo "<td>".$row[Datum]."</td>";
                                 echo "<td>".$row[Bildgroesse]."</td>";
                                 echo "<td>".$row[Fotograf]."</td>";
                                 echo "</tr>";
                         }
                      ?>
                 </form>
                 <form action="delete.php" method="POST">
                       <?php
                         $result = mysql_query($sql);
                         $felder = mysql_num_fields($result);   //Anzahl der Felder

                         echo "<tr>";

                         for($i = 0;$i < $felder;$i++) {
                         $feld = mysql_field_name($result, $i);
                        echo "<th>$feld</th>";
                    }

                         echo "</tr>\n";

                         while ($row = mysql_fetch_assoc($result)){

                             echo "<tr>";

                                 foreach ($row as $key => $value) {
                         echo "<td>$value&nbsp;</td>";
                            }

                        echo "<td><input type=\"radio\" name=\"delete\" value=\"$row[id]\" /></td>";
                                 echo "</tr>\n";
                         }

                            mysql_close($db);
                      ?>

                     </table>
                     <br/><input type="button" value="hier geht es zum Logout" onclick="window.location='logout_fotoarchiv.php';">

                     <br/><br/><br/><br/> M&ouml;chten Sie die ausgew&auml;hlten Datens&auml;tze l&ouml;schen?
                     <input type="submit" value="löschen" /></input>
                 </div>
                 </form>
                 <?php
                     }
                 ?>
         </body>
</html>
Und so sieht die delete.php aus:

PHP:
<DOCTYPE HTML PUPLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
             <meta http-equiv="content-type" content="text/html, charset=iso-8859">
                 <link rel="stylesheet" type="text/css" href="css/style.css">
             <title>Fotoarchiv - Datens&auml;tze l&ouml;schen!!</title>
         </head>
         <body>
                 <div id="formular"><br/>
                     <?php
                         include("inc/fotoarchiv_database.inc.php");

                         $id=$_POST['delete'];
                         $sql="DELETE FROM fotoarchiv WHERE id=$id";
                         $result=mysql_query($sql);

                         if ($result) {
                             echo "Datensatz mit ID= $id gelöscht!";
                                 }else{
                                 echo "Datensatz mit ID= $id nicht gelöscht";
                         }
                         mysql_close($db);
                     ?>

            <a href="ausgabe_fotoarchiv.php">Zur &Uuml;bersicht zur&uuml;ck</a>
                 </div>
         </body>
</html>
Es funktioniert glaube nun auch alles soweit in der Funktion, bis auf das sich die Tabelle selbst aussucht wo sie die Daten schreibt. Sie tut es nicht da wo es sein soll hin und ich glaube irgendwie doppeln sie die Tabellen. Also einmal schreibt er sie nur und einmal ist sie mit Löschbutton versehen, und macht an dieser Stelle dafür aber meine Bildvorschau nicht.

Ich erkenn den Fehler leider nicht. Weiß nicht genau woran es liegt.
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Mehrfach LEFT JOIN??

Hi,

wenn alles soweit läuft zur Frage mit dem Delete. Also zum einen solltest du dir direkt angewöhnen zu prüfen, ob der übergebene POST/GET - Wert auch dem entspricht, was er sein soll. In deinem Fall ein "integer". Ergo prüfe:

Code:
if(isset($_POST['wert']) && (int)$_POST['wert')) {
 // mach was...
} else {
 // zeig die Error-Meldung
}
Dann zu deinem Delete in der sql. Um zu sehen, was du als Result erhälst, wäre es für dich wiederum wichtig zu wissen, wie den dein $result aussieht und was da so enthalten ist.
Deshalb bevor du irgendetwas prüfst - ausgeben lassen um zu wissen auf was du zu prüfen hast.
Code:
echo $result;
// oder
print_r($result);
Da du nun erkennen kannst, was du zu prüfen hast, kannst du auch deine
Code:
if($result === 'was?') {
 // weiter
} else {
 // melde mal den Error
}
Nun zu deiner Frage, warum da in dem if/else - Zweig gleich drei === enthalten sind. Zum einen prüfst du damit, ob der zurückgegebene Wert dem entspricht, auf welchen du vergleichst. Das wären dann zwei ==. Das dritte prüft auch noch direkt den type mit. Sprich - ist es ein string oder ein integer oder gar boolean oder was auch immer.

Nun noch etwas zu deinen Werten, welche du in die DB sendest. Nimm dir die Zeit und lese den 1. oder 2. Thread in diesem Forenbereich - Grundlagen zu php. Darin sind noch einige wichtige Infos für dich enthalten.

Und zu guter letzt nur eine Randnotiz. Wenn bei SQL-Statements LEFT, RIGHT oder INNER JOIN zum einsatz kommt/en, dann ist es absolut erforderlich, jeder Tabelle welche in FROM benannt ist, einen sogenannten Alias zu vergeben ;)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.342
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben