MySQL-Klasse - verschachtelte Abfragen

pxlArtizzt

Erfahrenes Mitglied
Moin!

Ich habe vor einiger Zeit bei tutorials.de eine MySQL-Klasse heruntergeladen, leider kann ich das 'Tutorial' nicht mehr finden und der Autor ist mir auch unbekannt...

Es geht mir darum, wie ich verschachtelte Datanbankabfragen gestalten kann, hier ein Beispiel:

PHP:
$sql = 'select 1';
$db->query($sql);
while ($row = $db->fetch_array()) {
	$sql_2 = 'select 2';
	$db->query($sql_2);
	while ($row_2 = $db->fetch_array()) {
// Anweisungen
	}
// Anweisungen 2
}

das funktioniert so leider nicht, da wahrscheinlich die Querys in jedem Schleifendurchgang überschrieben werden...

Hier ein Auszug aus der MySQL-Klasse, anbei ist die komplette.

PHP:
class db {

// integer
	var $a_rows = 0;
	var $link_id = 0;
	var $query_id = 0;
	var $errno = 0;
	var $show_error = 0;
	var $mail_error = 0;
	var $port = 0;
	var $query_c = 0;
	var $rows = 0;
// string
// [...]
// array 
	var $record = array();

// [...]

		function query( $query ) {
			$this->query_id = @mysql_query( $query, $this->link_id );
			$this->query_c++;
			if ( !$this->query_id ) {
				$this->error("Invalid SQL: \"<i>$query</i>\"");
			}
			$this->a_rows = @mysql_affected_rows($this->query_id);
			return $this->query_id;
		}

// [...]

Vielen Dank für eure Hilfe!

Ciao!
pxlArtizzt
 
Man solte verschachtelte Datenbankabfragen generell vermeiden. Meistens ist es möglich alle Daten aus nur einer Abfrage, unter Verwendung von Joins zu beziehen. Für welchen konkreten Fall benötigst Du denn die Verschachtelung?

snuu
 
na mit joins kenne ich mich überhaupt nicht aus, und ein gutes tut habe ich dazu noch nicht gefunden... :( Kennst du eins

Der Hintergrund ist: Ich suche Produkte aus einer Tabelle und dann mit dem 2. prüfe ich, ob dieses Produkt als Zubehör in einer anderen Tabelle definiert wurde.
 
und eben dafür sind Joins gedacht. ohne die kommst Du in Sachen SQL überhaupt nicht weit. Poste bitte einmal den Aufbau der beidn Tabellen (also welche Felder in welcher Tabelle zu finden sind).

snuu
 
OK... dann will ich mal (nur die Spaltennamen reicht hoffentlich):

Tabelle produkte:
artnr
produktgruppe
name
beschreibung
preis


und Tabelle produkte_zubehoer
id
produkt_artnr
zubehoer_artnr


in der Tabelle produkte_zubehoer wird eben festgelegt, welches Produkt Zubehör von einem anderen ist (hoffe das ist verständlich für Außenstehende =)
 
Code:
select distinct artnr, Name
from produkte, 
     produkte_zubehoer
where produkte.artnr = produkte_zubehoer.produkt_artnr

Das sollte Dir alle die Produkte zurückgeben, die in der Tabelle produkte_zubehoer mindestens einen Datensatz besitzen.

snuu
 
Zurück