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

Tabellen verknüpfen / Daten automatisch eintragen

Aber ich bin mir nach dem lesen nicht mehr ganz sicher ob ich die Verbindung richtig erklärt habe.
Denn ich vermute das USING (SerienID) bedeutet alle Datensäte die dies Feld nutzen (egal was drin steht werden verbunden) und nicht wie bisher gedacht alle Felder die in diesem Moment den Selben Wert in SerienID nutzen.
Doch, es werden die Datensätze verbunden, die die gleiche SerienID haben.

Aber die Ausgabe wird natürlich nicht gruppiert und sortieren musst du sie vermutlich auch noch
 
Werbung:
Doch, es werden die Datensätze verbunden, die die gleiche SerienID haben.

Aber die Ausgabe wird natürlich nicht gruppiert und sortieren musst du sie vermutlich auch noch

Ja dass ist gut möglich. Wurde mir aber erst jetzt als Möglichkeit klar.

Ich habe zwei Abfragen die wie IF-Schleifen in einander verschachtelt sind. Ich hatte gedacht das da die Verknüpfung schon durch klar ist.
Ich habe nun mal mit ORDER BY und GROUP BY getestet. Doch die Verknüpfung zur ersten Abfrage im Code wird deshalb nicht mit der der zweiten Abfrage im Code zustande kommen.

Ich denke das dort das Problem liegt. Denn auch Sortieren und Gruppieren hintereinander bringt nicht das was ich suche.
Es müsste klar sein das die SerienID der Serie aus der ersten Abfrage die SerienID ist die der zweiten als Bedingung gemeldet wird.


Code:
<?php
[B]$ergebnis = mysql_query("SELECT * FROM Storyserien ORDER BY Erstellt_von ASC ")[/B] OR die("Error: $abfrage <br>".mysql_error());
echo '<table class="fantasie-uebersicht">';



while($row = mysql_fetch_object($ergebnis))
{





        if ($row->Veroeffentlicht == "1") // Veroeffentlicht ja/ ohne Wert = (überspringen)
        {
                    //             for ($i = 1; $i <= 2; $i++) :  ;   // modulus fr IE


                                      $class = '';     // Definiton class für Zeilenwechsel IE
                                      if ($i == 0) {
                                          $class = 'fantasie-zeile1';
                                      } else if ($i % 2 === 0) {
                                          $class = 'fantasie-ungerade';
                                      } else {
                                          $class = 'fantasie-gerade';
                                      };


              echo  '<tr class="'.$class.'">';
echo              '<td class="fantasie-uebersicht">';

              if ($row->NEU == "")    // FSK18 ja/ ohen Wert = (ohne Bild)
              {
              echo '<p class="glowtext-story_new">',
                   $row->Serie, '</p>';
              }
              else
              {
              echo '<p class="glowtext-story">',
                   $row->Serie, '</p>', $row->SerienID;
              }

              if ($row->FSK18 == "Einige")    // FSK18 ja/ ohen Wert = (ohne Bild)
              {
              echo 'Serie zum Teil <img src="'.$LINK.'Images/fsk18_logo.gif" alt="Die Serie ist aktuell ', $row->FSK18, ' als FSK18 eingestufft" border="1" width="58" height="17"><br />';
              }
              elseif ($row->FSK18 == "Alle")    // FSK18 ja/ ohen Wert = (ohne Bild)
              {
              echo 'Serie 100% <img src="'.$LINK.'Images/fsk18_logo.gif" alt="Die Serie ist aktuell ', $row->FSK18, ' als FSK18 eingestufft" border="1" width="58" height="17"><br />';
              }
              else
              {
              echo '</p><br />';
              }

              if ($row->Erstellt_bis != "0000")
              {
              echo '<span class="copyright">©',  $row->Erstellt_von, ' - ' ,$row->Erstellt_bis, '</span><br /><br />';
              }
              else
              {
              echo '<span class="copyright">©',  $row->Erstellt_von, '</span><br /><br />';
              }



        echo '<span class="untertitel">', $row->Beschreibung; '</span>';


        if ($row->Kommentare != "")   // Kommentare oder ohne
        {
        echo '</td></tr>';
        };    // ende if (veroeffentlicht)

[B]$story = mysql_query("SELECT Storyname FROM Storyserien s LEFT JOIN Story st USING(SerienID) GROUP BY SerienID ORDER BY SerieNr");[/B]

        echo '<h4>Storys dieser Serie:</h4><p class="serienliste">';

while($rowstory = mysql_fetch_object($story))
{

        echo '=> ' ,$rowstory->Storyname, '&nbsp;&nbsp;';
};   // ende while
        echo '</p>';

        $i++;
        };          //     endfor;
};   // ende while

echo '</table>';

?>
 
Welche ID aus der ersten Abfrage, da ist keine ID. Und mit gruppieren meinte ich eigentlich die Ausgabe. group by macht was anderes.

EDIT: ach so, sinnvoll ist es die Abfrage mit phpmyadmin zu testen, dann siehst du auch wie du die Daten bekommst.
 
Werbung:
Nochmal gegrübelt.
Durch das Verknüpfen entsteht doch eine Virtuelle Tabelle mit den Daten aus beiden Tabellen, richtig?
Wenn ich nun dafür gesorgt habe das die Feldnamen immer nur ein einziges Mal vorkommen (auser SerienID natürlich)
Dann müsste ich doch die beiden Abfragen nur noch zu einer zusammenfassen (so das dort die ID ist) und kann dann mit

$row->.... auf die Felder beider Abfragen zugreifen.

Denn wenn ich weiter richtig verstehe kann ich Abfragen nicht wie If-Schleifen behandeln. Und davon ausgehen das die gleichen Argumente gelten.

Dann erreiche ich vermutlich auch das gesuchte Ergebnis

Tabellenzeile 1:
Serienname (sortiert nach ABC)
Infos und Bescheibung zur Serie
---------
Liste mit allen Storys der Serie (sortiert nach SerienNr)

Tabellenzeile 2:

Nächster Serienname....

usw....
 
Mist... das klappt auch nicht also dann doch mit zwei Abfragen?

ich habe keinen Schimmer wie ich das hinbringe.
Mache Heute erst einmal Schluß

Code:
<?php
$ergebnis = mysql_query("SELECT * FROM Storyserien ORDER BY Serie_Erstellt_von ASC ") OR die("Error: $abfrage <br>".mysql_error());
echo '<table class="fantasie-uebersicht">';



while($row = mysql_fetch_object($ergebnis))
{





        if ($row->Serie_Veroeffentlicht == "1") // Veroeffentlicht ja/ ohne Wert = (überspringen)
        {
                    //             for ($i = 1; $i <= 2; $i++) :  ;   // modulus fr IE


                                      $class = '';     // Definiton class für Zeilenwechsel IE
                                      if ($i == 0) {
                                          $class = 'fantasie-zeile1';
                                      } else if ($i % 2 === 0) {
                                          $class = 'fantasie-ungerade';
                                      } else {
                                          $class = 'fantasie-gerade';
                                      };
.......
...... diverse IF-Schleifen
......

$story = mysql_query("SELECT Storyname FROM Storyserien s LEFT JOIN Story st USING(SerienID)");

        echo '<h4>Storys dieser Serie:</h4><p class="serienliste">';

while($rowstory = mysql_fetch_object($story))
{

        echo '=> ' ,$rowstory->Storyname, '&nbsp;&nbsp;';
};   // ende while
        echo '</p>';

        $i++;
        };          //     endfor;
};   // ende while

echo '</table>';

?>






</body>
</html>
 
Es reicht EINE Abfrage mit Join. Wie gesagt, schau dir das Ergebnis der abfrage mal mit phmyadmin an, dann siehst du was du bekommst.

EDIT: Ach, und lies mal die selfhtml Artikel, joins zu verstehen ist nicht einfach
 
Werbung:
Es reicht EINE Abfrage mit Join. Wie gesagt, schau dir das Ergebnis der abfrage mal mit phmyadmin an, dann siehst du was du bekommst.

EDIT: Ach, und lies mal die selfhtml Artikel, joins zu verstehen ist nicht einfach

Das Ergebnis bei phpmyadmin war das selbe wie in der Website.
Eine Auflistung aller Storys nach SerienID und Reihenfolge in der Datenbank.
Aber warum ist mir nun schon mal klar.

Das bei selfhtml werde ich lesen. Hoffentlich komme ich damit auch zurecht.

OK also doch eine Abfrage kombiniert aus beiden.
War der Gedanke doch nicht so falsch.
 
wie gesagt, wenn man nicht die Daten sieht ist so ein Thema schwierig. Ich glaube mittlerweile du willst doch die Abfrage umgekehrt machen:

In etwa so: SELECT * FROM Story st LEFT JOIN Storyserien s USING(SerienID) ORDER BY s.SerienID, st.serienNr
 
Werbung:
wie gesagt, wenn man nicht die Daten sieht ist so ein Thema schwierig. Ich glaube mittlerweile du willst doch die Abfrage umgekehrt machen:

In etwa so: SELECT * FROM Story st LEFT JOIN Storyserien s USING(SerienID) ORDER BY s.SerienID, st.serienNr

Welche Daten brauchst Du den genau? Mit Screenshots habe ich schon Struktur und einen Ausschnitt der Einträge geschickt.
Denn dies bringt mir leider immer noch alle Storys unter jeder Serie egal welcher Serie sie angehören.
 
Zuletzt bearbeitet:
Ich brauch nur solche, wo man eine Abfrage einmal Beispielhaft sich anschauen kann. Also CREATE TABLE und eine handvoll Datensätze.
 
Werbung:
Auf die Schnelle:

Code:
SELECT *
FROM story st
LEFT JOIN storyserien s
USING ( SerienID )
ORDER BY s.SerienID, st.SerieNr

Damit hast du eine Übersicht über alle Serien. Dann musst du im PHP Skript, die SerienID prüfen und wenn sie wechselt, gibst du die Daten zur Serie aus.
 
Auf die Schnelle:

Code:
SELECT *
FROM story st
LEFT JOIN storyserien s
USING ( SerienID )
ORDER BY s.SerienID, st.SerieNr

Damit hast du eine Übersicht über alle Serien. Dann musst du im PHP Skript, die SerienID prüfen und wenn sie wechselt, gibst du die Daten zur Serie aus.

Hmmm...:?... etwa so?

SerienID = 1

und am ende der while schleife ähnlich wie bei der for-schleife SerieAnzeige = SerienID+1

Und in der Abfrage dann WEHRE SerienID=SerieAnzeige
 
Nein in etwa so:

PHP:
$old_id;
while( $row = lese Daten) {
if($old_id != $row->serienID){
// Ausgabe des Serienheaders
}
// Ausgabe des Datensatzes
$old_id = $row->serienID;
}
 
Werbung:
Nein in etwa so:

PHP:
$old_id;
while( $row = lese Daten) {
if($old_id != $row->serienID){
// Ausgabe des Serienheaders
}
// Ausgabe des Datensatzes
$old_id = $row->serienID;
}

Danke... doch das ist nun so verkürzt und vereinfacht das ich Schwierigkeiten habe dies zu erkennen und dem aktuellen Code zu zuordnen.

besonders mit "lese Daten" ,"Ausgabe..."
 
Das sind doch alles Sachen, die du uns schon gezeigt hast?

Ich bin nicht so gut in PHP, dass ich das schnell mal schreibe. Lese Daten ist diese Zeile while($row = mysql_fetch_object($ergebnis))
und Ausgabe, das was du ausgeben willst.
 
Das Ergebnis stimmt leider noch nicht da ich mit dem richtigen einfügen ein Problem habe.
In dem code war ein fehler beim php den ich beseitigt habe. Das hatte aber keine auswirkungen auf die Auflistung der Storynamen.

Die Struktur zum aktuellen code:

SELECT * FROM Storyserien ORDER BY Serie_Erstellt_von ASC

Echo Tabelle öffnen

while($row = mysql_fetch_object($ergebnis))

if-schleife Veröffentlicht

for-schleife für IE-Tabellenwechsel
Ende for-schleife

Echo Tabellen Zeile / Tabellenspalte

if-schleife Serie_NEU (logo / Schriftstyle)
Else

If-schleife Serie_FSK18
Ifelse
else

If-schleife Serie_Erstellt_bis
else

echo Serie_beschreibung

SELECT * FROM Story st LEFT JOIN Storyserien s USING(SerienID) ORDER BY s.SerienID, st.SerieNr

echo "Storys dieser Serie"

while($rowstory = mysql_fetch_object($story))
Echo $rowstory->Storyname
Ende While $rowstory

Ende If-Schleife Veröffentlicht

Ende Tabellenspalte /Zeile

IE Modulus hochzählen

Ende While $row

echo Ende Tabelle

PHP:
<?php
$ergebnis = mysql_query("SELECT * FROM Storyserien ORDER BY Serie_Erstellt_von ASC ") OR die("Error: $abfrage <br>".mysql_error());
echo '<table class="fantasie-uebersicht">';



while($row = mysql_fetch_object($ergebnis))
{





        if ($row->Serie_Veroeffentlicht == "1") // Veroeffentlicht ja/ ohne Wert = (überspringen)
        {
                    //             for ($i = 1; $i <= 2; $i++) :  ;   // modulus fr IE


                                      $class = '';     // Definiton class für Zeilenwechsel IE
                                      if ($i == 0) {
                                          $class = 'fantasie-zeile1';
                                      } else if ($i % 2 === 0) {
                                          $class = 'fantasie-ungerade';
                                      } else {
                                          $class = 'fantasie-gerade';
                                      };      //     endfor;


              echo  '<tr class="'.$class.'">';
echo              '<td class="fantasie-uebersicht">';

              if ($row->Serie_NEU == "")    // FSK18 ja/ ohen Wert = (ohne Bild)
              {
              echo '<p class="glowtext-story_new">',
                   $row->Serienname, '</p>';
              }
              else
              {
              echo '<p class="glowtext-story">',
                   $row->Serienname, '</p>', $row->SerienID;
              }

              if ($row->Serie_FSK18 == "Einige")    // FSK18 ja/ ohen Wert = (ohne Bild)
              {
              echo 'Serie zum Teil <img src="'.$LINK.'Images/fsk18_logo.gif" alt="Die Serie ist aktuell ', $row->FSK18, ' als FSK18 eingestufft" border="1" width="58" height="17"><br />';
              }
              elseif ($row->Serie_FSK18 == "Alle")    // FSK18 ja/ ohen Wert = (ohne Bild)
              {
              echo 'Serie 100% <img src="'.$LINK.'Images/fsk18_logo.gif" alt="Die Serie ist aktuell ', $row->FSK18, ' als FSK18 eingestufft" border="1" width="58" height="17"><br />';
              }
              else
              {
              echo '</p><br />';
              }

              if ($row->Serie_Erstellt_bis != "0000")
              {
              echo '<span class="copyright">©',  $row->Serie_Erstellt_von, ' - ' ,$row->Serie_Erstellt_bis, '</span><br /><br />';
              }
              else
              {
              echo '<span class="copyright">©',  $row->Serie_Erstellt_von, '</span><br /><br />';
              }



        echo '<span class="untertitel">', $row->Serie_Beschreibung; '</span>';

$story = mysql_query("SELECT * FROM Story st LEFT JOIN Storyserien s USING(SerienID) ORDER BY s.SerienID, st.SerieNr");

        echo '<h4>Storys dieser Serie:</h4><p class="serienliste">';

while($rowstory = mysql_fetch_object($story))
{

        echo '=> ' ,$rowstory->Storyname, '&nbsp;&nbsp;';
};   // ende while rowstory

        echo '</p>';


        };    // ende if (veroeffentlicht)

echo '</td></tr>';

        $i++;       //  IE Modulus hochzählen
        };          // while Ende Tabellenzeile inkl Serienheader und Storys zur Serie


echo '</table>';

?>



 
Werbung:
Du brauchst nur EINE Abfrage und EINE Schleife, nur die mit dem JOIN. In den Daten ist alles was du brauchst.

P.S.: Es gibt übrigens keine if-schleifen.
 
Du brauchst nur EINE Abfrage und EINE Schleife, nur die mit dem JOIN. In den Daten ist alles was du brauchst.

P.S.: Es gibt übrigens keine if-schleifen.

Dann war das mit dem zusammenfassen doch ein richtiger Ansatz?

Code:
SELECT * FROM FROM Storyserien s LEFT JOIN Story st USING(SerienID) ORDER BY Serie_Erstellt_von ASC

Aber wie bringe ich es dann zustande das alle Storys zur jeweiligen Serie aufgeählt werden wenn ich nur eine Schleife brauche.
Mir kommt das wie eine Schleife in der Schleife vor.

Wenn ich das richtig weis wird mit einer Schleife immer nur ein Datensatz aufgerufen.
Und bei den Storys müssen ja alle Datensäte mit der selben ID wie der Header (also die Serie) aufgerufen werden.

Mir ist nicht ganz klar warum das auch mit einer Schleife geht?
 
Zurück
Oben