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

Bei MySQL-Abfrage rekurisves Ergebnis

EDIT: Wie sich herausgestellt hat, waren die Ergebnisse nicht rekursiv... Die Datenbank war einfach unvollständig und deshalb wurde $Current nicht überschrieben...

So ist das halt bei Schulprojekten, man kann sich auf niemanden verlassen, wenn man selbst nicht nachguckt....

Ist somit erledigt.

________________________________________________________________________________

Hallo zusammen.
Ich sitze gerade an nem Schulprojekt und bin wirklich langsam am verzweifeln.

Kurze Erklärung: Ich muss Kontaktdaten aus der Datenbank aus verschiedenen Regionen auslesen. Die ausgewählten Regionen werden vorher durch ein Formular übergeben.
Um jetzt alle Daten zu bekommen, benutze ich folgende Schleife:

PHP:
if ( !is_array($_POST['kreis']) )
  {
  $Kreise[] = $_POST['kreis'];
  }
  else
  {
  $Kreise = array();
  $Kreise = $_POST['kreis'];
  }
  // Personen in den/dem ausgewählte(n/m) Kreis(en) abfragen
  $PersonDaten = array();
  for ( $i = 0; $i < count($Kreise); $i++ )
  {
  $query = "  SELECT RegionName, Name, Vorname, Email, Telefon, Mobil, Fax, Homepage, EinrichtungsName, UntereinrichtungsName
  FROM region
  JOIN regionperson
  USING (RegionID)
  JOIN person
  USING (PersonID)
  JOIN personeinrichtung
  USING (PersonID)
  JOIN einrichtung
  USING (EinrichtungsID)
  WHERE region.RegionName = '".$Kreise[$i]."'";
  print_r("<pre>Query:".$query."</pre><hr />");
  $Current = $DB->GetAll($query) or die(mysql_error());
  echo "<pre>";
  print_r($Current);
  echo "</pre><hr />";
  $PersonDaten[] = $Current;
  }

Wie man schon erkennen kann, benutze ich eine Datenbank-Klasse - die ich selbst geschrieben habe. Die Funktion GetAll hat bis jetzt auch nie Probleme gemacht.

PHP:
  public function GetAll($qry)
  {
  if ( $this->rows = mysql_query($qry) )
  {
  while ( $this->result = mysql_fetch_assoc($this->rows) )
  {
  $this->results[] = $this->result;
  }
  } else {
  die(mysql_error());
  }
  $this->tempresult = $this->results;
  return $this->tempresult;
  }

So... Laut meinem Verständnis müssten ja in der Vorschleife unterschiedliche Queries ausgefüht werden. Das bestätiigt auch die Testausgabe, die ich in der for-Schleife laufen habe.
Allerdings erhalte ich bei $Current immer dasselbe result aus der Datenbank-Funktion.

Hier rmal die Testausgabe:
Code:
Query: SELECT RegionName, Name, Vorname, Email, Telefon, Mobil, Fax, Homepage, EinrichtungsName, UntereinrichtungsName
FROM region
JOIN regionperson
USING (RegionID)
JOIN person
USING (PersonID)
JOIN personeinrichtung
USING (PersonID)
JOIN einrichtung
USING (EinrichtungsID)
WHERE region.RegionName = 'Aachen (Städteregion)'
Array
(
[0] => Array
(
[RegionName] => Aachen (Städteregion)
[Name] => Eyermann
[Vorname] => Bernd
[Email] => b****
[Telefon] => ***
[Mobil] =>
[Fax] =>
[Homepage] =>
[EinrichtungsName] => Bonner General-Anzeiger
[UntereinrichtungsName] =>
)

[1] => Array
(
[RegionName] => Aachen (Städteregion)
[Name] => Kressin
[Vorname] => Claudia
[Email] => [email protected]
[Telefon] =>
[Mobil] =>
[Fax] => ***
[Homepage] =>
[EinrichtungsName] => Kressin Public Relations
[UntereinrichtungsName] =>
)

)

Query: SELECT RegionName, Name, Vorname, Email, Telefon, Mobil, Fax, Homepage, EinrichtungsName, UntereinrichtungsName
FROM region
JOIN regionperson
USING (RegionID)
JOIN person
USING (PersonID)
JOIN personeinrichtung
USING (PersonID)
JOIN einrichtung
USING (EinrichtungsID)
WHERE region.RegionName = 'Düsseldorf'
Array
(
[0] => Array
(
[RegionName] => Aachen (Städteregion)
[Name] => Eyermann
[Vorname] => Bernd
[Email] => ***
[Telefon] => ***
[Mobil] =>
[Fax] =>
[Homepage] =>
[EinrichtungsName] => Bonner General-Anzeiger
[UntereinrichtungsName] =>
)

[1] => Array
(
[RegionName] => Aachen (Städteregion)
[Name] => Kressin
[Vorname] => Claudia
[Email] => [email protected]
[Telefon] =>
[Mobil] =>
[Fax] => ***
[Homepage] =>
[EinrichtungsName] => Kressin Public Relations
[UntereinrichtungsName] =>
)

)

Mein Tipp wäre ja, dass der Wert von $DB->results nicht neu überschrieben wird. ich habe auch schon versucht, bei jedem Aufruf der Method $this->results = array(); zu benutzen oder für eine foreach-Schleife alle Indizes zurückzusetzen, dann erhalte ich allerdings nichtmal ein zweites Result, sondern $Current bleibt beim 2. Durchlauf einfach leer....

error_reporting(E_ALL); oder mysql_error(); an jeder erdenklichen Stelle hat mir bisher nichts geliefert. Ich hoffe wirklich, dass mir hier jemand helfen kann.

(PS: Der Code ist eigentlich eingerückt, allerdings geht das beim Kopieren verloren)

Grüße und Danke schonmal,
der NetzSchleicher
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben