2 Tabellen, auf eine davon zwischendrinn zugreifen geht nicht

Tob

Erfahrenes Mitglied
Hallo,
ich habe zwei Tabellen, in der ersten stehen die Gästebucheinträge,
in der zweiten stehen die Antworten auf die Beiträge.
Früher hatte ich immer einen link im Beitrag auf den man klicken
konnte um die Antworten zu sehen, das möchte ich nun aber dahingehend
ändern, dass die Antworten direkt unter dem Beitrag stehen, also so:
Code:
Beitrag
    Antwort
    Antwort
    Antwort
Beitrag
Beitrag
Beitrag
    Antwort
    Antwort
Beitrag
    Antwort
Beitrag
.
.
.
mein Code (der nicht funktioniert) sieht im moment so aus:
PHP:
  $result = mysql_query("Select * FROM $threads order by Nr DESC limit $start,$ende")or die (mysql_error());
  while ($row = mysql_fetch_array($result)){
              // formatierte ausgabe des Beitrags...
              if ($row['antwort'] == "ja"){ // schauen ob es Antworten auf den Beitrag gibt, wenn ja die Anfrage an die Antwortentabelle starten.
        			$antworten = mysql_query("Select * FROM $antwort_threads  WHERE antwort_auf_id = $row[Nr] order by Nr DESC") 
        			or die (mysql_error());
        				while ($zeile = mysql_fetch_array($result)){
        		 				// formatierte Ausgabe der Antworten...
        				}
        	  }
  }
Das Problem ist jetzt, dass nachdem die zweite Anfrage gestartet wurde
die Ergebnisse aus der ersten Anfrage weg sind und die erste
while-Schleife einfach beendet wird. Ich möchte aber gerne wenigstens
15 Beiräge und ihre Antworten anzeigen. Ich habe auch schon einige
Hinweise auf "JOIN" gefunden, leider komme ich mit der Erläuterung auf
Mysql.de echt nicht klar (dafür reicht meine sql Wissen einfach nicht
aus... sql ist bei mir mehr so Mittel zum Zweck...) Ich hoffe es ist
klar, wo das Problem liegt und was ich im Endeffekt erreichen möchte.

tob
 
Hallo Tob,

ich bin zwar kein PHP Kenner, aber ich versuche mal mein Wissen aus Perl analog zu übertragen:

Bei der zweiten SQL Abfrage weist du das Ergebnis der Variablen $antworten zu. Bei der anschließenden while Schleife machst du dann einen fetch auf $result.

Daher greifst du immer auf das Ergebnis der ersten Abfrage zu. Ich denke es reicht aus in der zweiten while-Schleife $result mit $antworten auszutauschen.

Grüße Thomas
 
ohne garantie (einfach schnell niedergeschrieben):
PHP:
$result = mysql_query("SELECT a.*, b.* FROM $threads AS a, $antwort_threads AS b WHERE a.antwort = 'ja' AND b.antwort_auf_id = a.Nr ORDER BY a.Nr DESC, b.Nr DESC LIMIT $start,$ende") OR DIE (mysql_error());
while ($zeile = mysql_fetch_array($result))
{
	// formatierte Ausgabe der Antworten...
}

greetz
 
@Taurus
Also nach den Erfahrungen die ich bis jetzt gemacht habe kann man
immer nur auf das letzte Ergebnis zugreifen und das Vorherige geht
verloren, da hilft es auch nicht ihnen verschiedene Namen zu geben.

@bloddy newbie
habe es gerade mal ausprobiert, Mysql gibt mir die wahnsinnig
hilfreichte Rückmeldung
You have an error in your SQL syntax near '' at line 1
ganz toll. Ich liebe MySQL :rolleyes:
Naja egal, damit muss man leben, hat jemand ne idee woran es liegen
könnte?

tob
 
Halt stopp! ICh neheme alles zurück, schande über mein Haupt. Ich
hatte übersehen, dass in meinem Testskript die Werte $start und $ende
nicht gesetzt waren. :rolleyes:

Aber jetzt mal noch zum verständnis des ganzen. Jetzt bekomme ich in
der Variable $zeile ein array, in dem Der Beitrag steht und alle
antworten darauf oder? Ich kann ja nun nicht mehr erkennen welcher
Wert aus welcher Tabelle kommt... Wie bekomme ich das nun mit der
Formatierung der Ausgabe hin? Ich würde gerne so wie oben, die
Antworten ein wenig einrücken, und dazu muss ich ja erkennen welche
Werte aus der zweiten Tabelle kommen. Außerdem kann es ja beliebig
viele Antworten geben... help!

tob

Mir ist gerade noch ein Problem aufgefallen, Spalten in den beiden Tabellen haben die gleichen Namen...
 
Zuletzt bearbeitet:
Hallo Tob,

ich habe mich mal ein bisschen mit PHP beschäftigt.

Vielleicht ist die Lösung deines Problems eine zweite Datenbankverbindung. Die Funktion mysql_connect() gibt als Ergebnis eine Verbindungskennung zurück, die man als optionalen zweiten Parameter der mysql_query() Funktion angeben kann.

Für die Abfrage der Antworten kannst du also mit mysql_connect() eine zweite Verbindung aufmachen und über diese die Abfrage laufen lassen. Dann müsstest du sowohl auf das Ergebnis der Thread-Abfrage als auch auf das Ergbnis der Antworten-Abfrage zugreifen können und das Konstrukt mit den zwei geschachtelten while Schleifen beibehalten.

Grüße Thomas
 

Neue Beiträge

Zurück