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

Tabellen verknüpfen / Daten automatisch eintragen

Wenn ich so über #18 noch mal nachdenke:

Dann kommt in diesem Fall nur die Serie mit ID = 1 heraus.

Das heißt, es werden alle Stories aus der Serie mit Story.SerienID = 1 angezeigt? Das wäre ja genau richtig. Oder was ist die „jeweilig entsprechende Liste“?

Im anderen Thread war leider nie von SerienID die Rede.

Ich verstehe hier derzeit nicht, wie die Daten aussehen, und auch nicht, was das gewünschte Ergebnis ist. Das ist immer etwas schlecht.
 
Werbung:
Code:
SELECT Storyname
FROM Story, Storyserien
WHERE Story.SerienID = Storyserien.SerienID
  AND Storyserien.SerienID = '1'

Das müsste theoretisch hinhauen, wenn auch Theta-Style-Joins nicht mehr wirklich empfohlen werden.

Ich weiß nicht genau, wie man da am besten rangeht. Vielleicht könntest du mal die Daten zeigen?

Ein Beispiel der Daten (mit neuem Feld SerienID)
 

Anhänge

  • Beispieldaten.jpg
    Beispieldaten.jpg
    91,6 KB · Aufrufe: 5
Zuletzt bearbeitet:
Wenn ich so über #18 noch mal nachdenke:



Das heißt, es werden alle Stories aus der Serie mit Story.SerienID = 1 angezeigt? Das wäre ja genau richtig. Oder was ist die „jeweilig entsprechende Liste“?

Im anderen Thread war leider nie von SerienID die Rede.

Ich verstehe hier derzeit nicht, wie die Daten aussehen, und auch nicht, was das gewünschte Ergebnis ist. Das ist immer etwas schlecht.

In dem anderen Thread gab es die ID auch noch nicht.

Es gibt aktuell 7 Serien. Also SerienID von 1 bis 7. Und in der Übersicht der Serien werden alle 7 Serien aufgerufen. Mit der Code-Erweiterung wird bei allen 7 Serien immer die Storys mit der SerienID 1 aufgezählt. Und das ist natürlich nicht gewollt.
 
Werbung:
Das geht mit dem von mir beschriebenen left join, deine Datenbank ist aber nicht normalisiert, du hast hier redundante Felder die eine separate Tabelle gehören. Das Feld serie und SerienEnde sind eindeutig felder die in eine andere Tabelle gehören. Und das Feld erstellt muss mit sicherheit ein DateTime Feld sein und damit entfällt auch das Feld neu, aber das sgate ich bereits.

Wir können dir übrigens nur theoretisch helfen, da mit einem Screenshot sich nicht arbeiten läßt. Im Prinzip bräuchten wir einen Dump der notwendigen Tabellen, denn an deiner ganzen Struktur gibt es noch einiges zu verändern.
 
Nachtrag, weil ich nicht drauf eingegangen bin (ich hab grad viel um die Ohren)

Lasse ich EXPLAIN auf meinem PC laufen?
Explain ist ein mysql der deine Abfrage analysiert. In phpmyadmin gibt es sogar schon ein Kästchen, wo direkt diese Analyse gemacht wird (in der dt. Version heißt das "Abfrage erklären"(o.ä.))

Die Felder ueberarbeitet und erstellt sind Felder vom Typ Jahr weil ich nur das Jahr kenne. Und keinen genauen Zeitpunkt. Zumindest vor 2010 nicht mehr.
Und auch nur das Jahr angezeigt wird.
Das spielt keine grosse Rolle, du hast ein Feld neu, das hängt wohl damit zusammen, oder? Und wenn du hier das Datum speicherst, kannst du dir das Feld neu sparen und anhand dieser Daten ermitteln ob ein Eintrag neu ist oder überarbeitet wurde.

Und die Ausgabe nur eines Datumbestandteiles ist absolut kein Problem. Ich nehme an du kennst die mysql Dokumentation? Such dort mal nach DateTime Funktionen.
 
Nachtrag, weil ich nicht drauf eingegangen bin (ich hab grad viel um die Ohren)

Das spielt keine grosse Rolle, du hast ein Feld neu, das hängt wohl damit zusammen, oder? Und wenn du hier das Datum speicherst, kannst du dir das Feld neu sparen und anhand dieser Daten ermitteln ob ein Eintrag neu ist oder überarbeitet wurde.

Und die Ausgabe nur eines Datumbestandteiles ist absolut kein Problem. Ich nehme an du kennst die mysql Dokumentation? Such dort mal nach DateTime Funktionen.

Erstellt meint das Jahr in dem die Story erschienen ist.
Mit Überarbeitet wird die Story nur abgeändert.

Mit Neu und Veroeffentlicht steuere ich ob und wie die Hinweise auf die Story erscheinen.
Ich habe Fälle in denen es Storys gibt die aber noch nicht veröffentlicht sind.

Die DateTime Funktion kenne ich und nutze sie für die Formatierung der News Hinweise (bzw. Das Datum in der History)
Doch wie gesagt da ich in vielen Fällten keine Tage oder Monate der Storys habe. Aber das selbe Jahr habe. Ist die Sache mit dem Jahr als Feld entstanden. Wie würdest Du das denn lösen wenn 20 - 30 Storys in die Zeitspanne 1998/99 fallen und Du keine Monate oder Tage kennst....? Es kann passieren das ich Neues aus anderen Bereichen früher veröffentliche. Das Erstellungsdatum der Story jedoch früher liegt.

Wir funktioniert das mit dem Dump?
Ich vermute das ist eine Kopie die ich einstellen würde?
Hinweis: Die Storys sind nicht als Text in einer der Tabellen eingetragen. Die Storys werden als text-datei includiert. Nur die Hinweise um die Story herum und alles was ich für die Steuerung und Erscheinungsbild brauche läuft über die Datenbank um so nach und nach immer wieder bereits vorher erstellte Storys oder Texte frei zugeben.
 
Werbung:
Code:
Das geht mit dem von mir beschriebenen left join, deine Datenbank ist aber nicht normalisiert, du hast hier redundante Felder die eine separate Tabelle gehören. Das Feld serie und SerienEnde sind eindeutig felder die in eine andere Tabelle gehören. Und das Feld erstellt muss mit sicherheit ein DateTime Feld sein und damit entfällt auch das Feld neu, aber das sgate ich bereits.

Wir können dir übrigens nur theoretisch helfen, da mit einem Screenshot sich nicht arbeiten läßt. Im Prinzip bräuchten wir einen Dump der notwendigen Tabellen, denn an deiner ganzen Struktur gibt es noch einiges zu verändern.


Das Feld Serie (also der Serienname) und Serienende kann nun da es SerienID gibt tatsächlich in die andere (neue) Tabelle.


Mein Problem ist nur, das ich aus Zeitgründen im Hintergrund entwickele. Und die Seite im Vordergrund trozdem weiterlaufen soll. Doch die greift ja auf die Daten zurück die Du als redundant also doppelt bezeichnest. Ich kann diese also nicht durch das normalisieren löschen. Ich kann für die Entwicklung eine Kopie in der anderen Tabelle erstellen auf die die Entwicklung zugreift. Und nach dem online stellen. dann Löschen.

Deshalb habe ich mal den Code
Code:
$storys = mysql_query("SELECT * FROM Storyserien s LEFT JOIN Story st USING(SerienID)");

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

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

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

probiert. Doch das selbe Ergebnis wie bei der alternativen Form.
Doch wie gesagt löschen bzw. verschieben ist nicht so ohne weiteres möglich. Da die alte noch laufende Version auf die Daten wie NEU usw zugreifen möchte.
 
Zuletzt bearbeitet:
Sollte das mit den redundaten Daten für diese Abfrage nicht erst mal egal sein?
Sonst muss ich die gesamte Datenbank kopieren und für die Entwicklung des UpDates mit der Kopie arbeiten.
Denn ich kann NEU nicht löschen und Jahr auf Datum verändern da die laufende Website noch mit diesen Daten arbeitet.


UpDate:

Der gesamte Code der Seite. Vielleicht ist der Auslöser für das Aufführen aller SerienID ja an einer ganz anderen Stelle als ich die ganze Zeit denke.

Code:
<?php
$ergebnis = mysql_query("SELECT * FROM Storyserien ORDER BY Erstellt_von ASC ") 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 />';
              }

  /*       Kolibrie ausgestetzt weil nun Schrift verändert


              if ($row->NEU == "")    // FSK18 ja/ ohen Wert = (ohne Bild)
              {
              echo '<br /><img src="Images/kolibrie.gif" alt="Diese Geschichte ist Neu" border="1" width="58" ><p />';
              }
              else
              {
              echo '<p />';
              }             */

         /*     if ($row->Zweitname != "")   // Brief/Telefon oder ohne Wert
              {
              echo'<em>' ,$row->Zweitname, "</em><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)

$story = mysql_query("SELECT * FROM Storyserien LEFT JOIN Story 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>';

?>
 
Zuletzt bearbeitet:
Ohne NEU - Aus Jahr / Erstellt_vom... wird TimeFeld - doch wie frage ich?

Das geht mit dem von mir beschriebenen left join, deine Datenbank ist aber nicht normalisiert, du hast hier redundante Felder die eine separate Tabelle gehören. Das Feld serie und SerienEnde sind eindeutig felder die in eine andere Tabelle gehören. Und das Feld erstellt muss mit sicherheit ein DateTime Feld sein und damit entfällt auch das Feld neu, aber das sgate ich bereits.

Wir können dir übrigens nur theoretisch helfen, da mit einem Screenshot sich nicht arbeiten läßt. Im Prinzip bräuchten wir einen Dump der notwendigen Tabellen, denn an deiner ganzen Struktur gibt es noch einiges zu verändern.

OK... ich habe mir die Tabellen kopiert und lese die Datenbank für die Entwicklung so lange vom localen SQL-Datenbank aus.
Nun kann ich alles verändern.

Doch ich habe keine Idee wie ich das mit der Time bzw Date Feld mache.
Mit dem aktuellen Tagesdatum kann ich (wohl) nicht vergleichen. Denn es gibt max. einmal die Woche ein Update. Und auch nicht immer in Storys.
Ebenfalls: Es gibt aktuell ca 50 veröffentlichte Storys die in Bereiche von A-C, D-F..... usw ... X-Y aufgeteilt sind. Es sind meist nur 1 oder 2 NEU. Also nicht in jedem Bereich eine NEUe.

Das habe ich wie in dem Code oben zu sehen bisher mit einer IF-Schleife für das Feld NEU gemacht.
Wenn diese nun weg fält muss ich das Datum in die IF-Schleife rein nehmen. Doch wo nach frage ich, wenn nicht nach dem heutigen Datum? Die Abfrage für die Tabelle sich aber auf ABC-Breich eingrenzt. Das NEU aber auf die Gesamten Stoys-Tabelle beziehen muss.

Wie kann ich also in der Abfrage für die ursprüngliche NEU-Markierung abgleichen ob die Story (oder anderes) der neuste Eintrag ist?
 
Werbung:
Industriemeister schrieb:
Wie würdest Du das denn lösen wenn 20 - 30 Storys in die Zeitspanne 1998/99 fallen und Du keine Monate oder Tage kennst....? Es kann passieren das ich Neues aus anderen Bereichen früher veröffentliche. Das Erstellungsdatum der Story jedoch früher liegt.

Ja, Date-Datentypen fallen da wohl flach, weil sie meines Wissens keine Eingaben wie „2011-??-??“, spätestens aber nicht mehr „1998/99“ gestatten.

Erstellt meint das Jahr in dem die Story erschienen ist.
Mit Überarbeitet wird die Story nur abgeändert.

Mit Neu und Veroeffentlicht steuere ich ob und wie die Hinweise auf die Story erscheinen.
Ich habe Fälle in denen es Storys gibt die aber noch nicht veröffentlicht sind.

Die DateTime Funktion kenne ich und nutze sie für die Formatierung der News Hinweise (bzw. Das Datum in der History)

Sowas ist für Außenstehende sehr schwer zu verstehen, weil du mit den einzelnen Feldern eine Logik oder Aussagen verknüpfst, die für dich nachvollziehbar sind, für uns aber vielleicht unverständlich sind, weil wir von deinem Gesamtkontext nur das mitbekommen, was hier mittlerweile im Thread steht.

Dass in dem gezeigten Schema, wie bereits angesprochen, SerienID nicht auftaucht und außerdem Redundanz enthalten ist, macht es nicht einfacher. Man weiß als Leser überhaupt nicht, ob du uns jetzt das aktuelle Schema zeigst. Das drückt die Motivation, sich damit zu befassen.

Wir funktioniert das mit dem Dump?

Über die Export-Funktion in phpMyAdmin.

Mein Problem ist nur, das ich aus Zeitgründen im Hintergrund entwickele. Und die Seite im Vordergrund trozdem weiterlaufen soll. Doch die greift ja auf die Daten zurück die Du als redundant also doppelt bezeichnest. Ich kann diese also nicht durch das normalisieren löschen. Ich kann für die Entwicklung eine Kopie in der anderen Tabelle erstellen auf die die Entwicklung zugreift. Und nach dem online stellen. dann Löschen.

Ja, richte dir das System noch einmal an anderer Stelle (lokal?) als Entwicklungsversion ein. Am Live-System sollte man nie rumspielen. Du erschwerst dir sonst das Leben nur künstlich selbst.
 
Ja, Date-Datentypen fallen da wohl flach, weil sie meines Wissens keine Eingaben wie „2011-??-??“, spätestens aber nicht mehr „1998/99“ gestatten.

Ein "1998/99" gibt es auch nicht.
Ich wollte damit die Zeit spanne 1998 und 1999 verdeutlichen in der die ersten 20 Storys liegen.
Und wie ich später geschrieben habe, bin ich ja gern bereit das Feld NEU fallen zu lassen. Und diese Abfrage mit einem TimeStamp zu klären.
Doch eine Frage treibt mich um.

Ich habe ca 60 Storys.
Davon sind ca. 50 veröffentlicht.
In den Bereichen. A-C, D-F, G-I, J-L, M-O, P-R, S-U, V-X, Y-Z.
Und meist nur 1 Story ist Neu. Gelegentlich auch mal 2 oder 3.
Z.b. im Bereich G-I Weil der Storyname mit "Gib..." beginnt.

Wenn ich nun also kein Feld NEU mehr habe. Wie frage ich dann den TimeStamp ab ob eine der Storys in der Liste (z.B D-F oder G-I) NEU ist?
Eine Story ist solange NEU bis eine weitere hinzukommt.
Das kann aber Tage manchmal Wochenlang dauern. Ich kann also nicht mit dem aktuellen Tagesdatum abgleichen.

Die anderen Vorschläge zb. aus Jahr ein TimeStamp zu machen. Den Seriennamen aus der Tabelle Story zu steichen und nur noch in der Tabelle Serien zu haben sind sicher absolut angebracht. Und werde ich auch gern umsetzten. Wenn gleich Jahr doch auch ein Zeitfeldtyp ist.


In welchem Format muss ich den Dump den Exprotieren? Eine SQL-Datei geht ja hier nicht.
 
Industriemeister schrieb:
Wenn ich nun also kein Feld NEU mehr habe. Wie frage ich dann den TimeStamp ab ob eine der Storys in der Liste (z.B D-F oder G-I) NEU ist?
Eine Story ist solange NEU bis eine weitere hinzukommt.

Wähle alle Stories des Bereichs aus (Pseudo-Code: WHERE SUBSTRING(`titel`, 0, 1) >= 'G' AND SUBSTRING(`titel`, 0, 1) <= 'I'), sortiere absteigend nach Datum des Einfügens (wenn du kein solches Feld hast, lege es an): Der erste Eintrag ist die neueste Story dieses Bereichs.

Und meist nur 1 Story ist Neu. Gelegentlich auch mal 2 oder 3.

Die zentrale Frage ist, wie du „neu“ definierst. „Eine Story ist solange NEU bis eine weitere hinzukommt.“ heißt im Umkehrschluss, dass es nur eine Story geben kann, die neu ist. Falls du das nicht meinst, musst du die Bedingung exakter definieren.

In welchem Format muss ich den Dump den Exprotieren? Eine SQL-Datei geht ja hier nicht.

SQL wäre aber schon richtig. Falls du die hier nicht als Anhang hochladen kannst, ändere vielleicht einfach die Dateiendung nach *.txt.
 
Werbung:
Wähle alle Stories des Bereichs aus (Pseudo-Code: WHERE SUBSTRING(`titel`, 0, 1) >= 'G' AND SUBSTRING(`titel`, 0, 1) <= 'I'), sortiere absteigend nach Datum des Einfügens (wenn du kein solches Feld hast, lege es an): Der erste Eintrag ist die neueste Story dieses Bereichs.



Die zentrale Frage ist, wie du „neu“ definierst. „Eine Story ist solange NEU bis eine weitere hinzukommt.“ heißt im Umkehrschluss, dass es nur eine Story geben kann, die neu ist. Falls du das nicht meinst, musst du die Bedingung exakter definieren.



SQL wäre aber schon richtig. Falls du die hier nicht als Anhang hochladen kannst, ändere vielleicht einfach die Dateiendung nach *.txt.

Den Bereich wähle ich bisher mit
Code:
SELECT * FROM Story WHERE Storyname REGEXP '^[" . mysql_real_escape_string($_GET['SQL']) . "]' ORDER BY Storyname ASC
aus

mit SQL wird über die URL z.B. g-i gesendet.

NEU ein aktuelles Beispiel:
Die Story(s) vom 2.12.11 ist(sind) aktuell NEU.
Wie lange das so ist ist nicht klar denn die Freischaltung der nächsten Story(s) plane ich nicht sondern mache ich händisch spontan.


Story.txt ist zu groß.
 
NEU ein aktuelles Beispiel:
Die Story(s) vom 2.12.11 ist(sind) aktuell NEU.
Wie lange das so ist ist nicht klar denn die Freischaltung der nächsten Story(s) plane ich nicht sondern mache ich händisch spontan.
Die Frage ist, ob NEU bei dir einfach nur die aktuelleste Datei ist oder ob es dafür noch andere Kritierien gibt? Wenn es keinen automatismus gibt, dann brauchst du das Feld natürlich.
 
Die Frage ist, ob NEU bei dir einfach nur die aktuelleste Datei ist oder ob es dafür noch andere Kritierien gibt? Wenn es keinen automatismus gibt, dann brauchst du das Feld natürlich.

Nein, NEU verweist nicht auf die neuste *.inc Datei oder den neusten Eintrag. Es gibt eine ganze Reihe von Dateien die schon auf dem Server sind und als Eintrag vorbereitet sind. Nur noch nicht freigegeben sind.

Für die Normaliesirung und die Lösung meines Problems mit der aufzählung alles SerienID:
Wenn ich Dich richtig verstanden habe muss ich dafür Serie (Serienname) verschieben in Storyserien.
Und die nicht benötigte SerieEnde löschen.
Die Felder mit Datentyp "JAHR" beziehen sich entweder auf die jeweilige Story oder auf die gesamte Serie
Weitere Dopplungen (redundanzen) gibt es zwischen den Tabellen Story und Storyserien nicht. Oder habe ich Deiner Meinung ein Feld übersehen das doppelt ist?
 
Werbung:
Nein, NEU verweist nicht auf die neuste *.inc Datei oder den neusten Eintrag. Es gibt eine ganze Reihe von Dateien die schon auf dem Server sind und als Eintrag vorbereitet sind. Nur noch nicht freigegeben sind.
Ich hatte mich vertippt, ich meinte natürlich nicht Datei, sondern Daten. Es wird einfach nicht klar, was NEU bei dir für eine Bedeutung hat und daher kann man nicht sagen, ob du das Feld brauchst oder nicht.

Wegen der Struktur: Ich hatte dich ja schon mal nach Beispieldaten gefragt, mir ist das zu kompliziert, mir abstrakt über deine Fragen Gedanken zu machen. Ich müßte die Daten sehen und anhand deiner Fragen damit rumspielen.
 
Ich hatte mich vertippt, ich meinte natürlich nicht Datei, sondern Daten. Es wird einfach nicht klar, was NEU bei dir für eine Bedeutung hat und daher kann man nicht sagen, ob du das Feld brauchst oder nicht.

Wegen der Struktur: Ich hatte dich ja schon mal nach Beispieldaten gefragt, mir ist das zu kompliziert, mir abstrakt über deine Fragen Gedanken zu machen. Ich müßte die Daten sehen und anhand deiner Fragen damit rumspielen.

Für Daten gilt das selbe wie für die inc Datei.
Ich würde ja gern eine Dump einstellen. Doch SQL-Endungen werden hier nicht erlaubt. Und die Txt von Story war zu groß.
Wie wäre es denn mit dem Dummy der Website. Das gibt mal einen Eindurck was mit den Daten passiert. Die Strucktur und einen Ausschnitt der Daten habe ich ja als Screenshot schon gepostet. Vielleicht wird dann verständlicher was mit NEU passiert.???
Allerdings ist der ganze Teil mit Serie dort noch nicht am laufen.

http://entwicklung.heisse-fantasien.de/index.php Kennwort per PN

Wenn ich Serie aus Story raus nehme habe ich ein Problem mit der anderen Abfrage. Dort fehlt dann das Argument. Aber erst einmal diese Sache.
 
Ich habe nun also nur noch in der Tabelle Storyserien den Seriennamen (Serie).
SerienEnde gibt es nicht mehr.

Ein paar Fragen: Es wird nach der Verknüpfung nur Storyname aufgezählt.
Ich gehe deshalb davon aus das nur dieser nicht doppelt vorhanden sein darf.
NEU oder Veröffentlicht müssen sicher nicht gelöscht werden (Sie beziehen sich jeweils auf die Story oder die Serie)
Oder muss ich alle Felder die einen Identischen Namen haben aber eine unterschiedliche Bedeutung auch unterschiedlich bezeichen?
Zb. aus Veroeffentlicht (bei Storyserien) wird Veroeffentlicht-Serie... usw.

Im Moment bekomme ich nachdem ich Storyname, und SerieEnde (die anderen Felder noch nicht) in der Tabelle Story gelöscht habe mit dem nach folgenden Code die Fehlermeldung:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\ENTWICKLUNG von heisse-fantasien\Bereich-fantasien\ueber-fantasien_serien.php on line 99
99 ist Fett markiert.

Code:
<?php
$ergebnis = mysql_query("SELECT * FROM Storyserien ORDER BY Erstellt_von ASC ") 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 />';
              }

  /*       Kolibrie ausgestetzt weil nun Schrift verändert


              if ($row->NEU == "")    // FSK18 ja/ ohen Wert = (ohne Bild)
              {
              echo '<br /><img src="Images/kolibrie.gif" alt="Diese Geschichte ist Neu" border="1" width="58" ><p />';
              }
              else
              {
              echo '<p />';
              }             */

         /*     if ($row->Zweitname != "")   // Brief/Telefon oder ohne Wert
              {
              echo'<em>' ,$row->Zweitname, "</em><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)

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

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

[B]while($rowstory = mysql_fetch_object($story))[/B]
{

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

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

echo '</table>';

?>

Zuvor bekamm ich noch alle Storys aufgezählt egal welche SerienID sie angehören.
 
Werbung:
Du solltest auch prüfen ob mysql_query() funktkioniert hat, dein Join Befehl ist seltsam,

mysql_query("SELECT * FROM Storyserien s LEFT JOIN Story st USING(SerienID)");

So bekommst du alle Datensätze aus Storyserien, mit den verknüpften Daten aus Story.

Hier noch Lesestoff zu joins

Einfhrung in Joins
Fortgeschrittene Jointechniken
 
Du solltest auch prüfen ob mysql_query() funktkioniert hat, dein Join Befehl ist seltsam,

mysql_query("SELECT * FROM Storyserien s LEFT JOIN Story st USING(SerienID)");

So bekommst du alle Datensätze aus Storyserien, mit den verknüpften Daten aus Story.

Hier noch Lesestoff zu joins

Einfhrung in Joins
Fortgeschrittene Jointechniken

Leider weis ich nicht so recht mit welchem Befehl ich mysql_query() prüfen kann.
Der Lesestoff scheint das wieder zu geben was bei Wiki stand. Aber ich finde ihn nicht ganz einfach zu durchschauen. Die Beispiele für den Nutzen (z.b. Löschen von Teildaten) leuchtet mir ein.

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.


Bsp des gewünschten Ergebnisses:

Serie: Anton hüpft (hat SerienID=1 / Serie steht in Storyserien <br />
Verschiedene Infos zur Serie (alles in Storyserien) <br />

--------------------------------------

Die Stroys zur Serie sind:

- Anton lernt hüpfen (SerienID=1)
- Anton hüpft erstes Mal allein (SerienID=1)
- Anton fällt beim hüpfen (SerienID=1)


mit Serie: Marie lernt Schwimmen (SerienID=2)...

-------------------------------

Die Stroys zur Serie sind:

- Marie lernt Schwimmen (SerienID=2)
- Marie Schwimmt erstes Mal allein (SerienID=2)
- Marie ertrinkt (SerienID=2)


ich bekomme aber


Serie: Anton hüpft (hat SerienID=1 / Serie steht in Storyserien <br />
Verschiedene Infos zur Serie (alles in Storyserien) <br />

--------------------------------------

Die Stroys zur Serie sind:

- Anton lernt hüpfen (SerienID=1)
- Anton hüpft erstes Mal allein (SerienID=1)
- Anton fällt beim hüpfen (SerienID=1)
- Marie lernt Schwimmen (SerienID=2)
- Marie Schwimmt erstes Mal allein (SerienID=2)
- Marie ertrinkt (SerienID=2)


mit Serie: Marie lernt Schwimmen (SerienID=2)...

-------------------------------


Die Stroys zur Serie sind:

- Anton lernt hüpfen (SerienID=1)
- Anton hüpft erstes Mal allein (SerienID=1)
- Anton fällt beim hüpfen (SerienID=1)
- Marie lernt Schwimmen (SerienID=2)
- Marie Schwimmt erstes Mal allein (SerienID=2)
- Marie ertrinkt (SerienID=2)
 
Zurück
Oben