kugelschreiber
Goto Top

MS-SQL - Zwei SQL Abfragen in while-Schleife verschachteln

Hallo Ihr Lieben,

ich möchte mit PHP Tabellen aus einer MS SQL Datenbank auslesen. Dies klappt soweit ganz gut. Die Verbindung steht und ich kann Daten auslesen.

Nun habe ich folgendes Problem:

Ich habe zwei Tabellen table1 und table2
in table1 stehen Artikelnamen und Artikelnummern(einzigartig nicht mehrfach vorhanden)
art_nr, art_name
in table2 beinhaltet zu den Artikeln Kommentare, welche (und das ist das Problem) in Zeilen abgespeichert sind.

Ein Beispiel aus Tabelle table2:

art_id, zeile, kommentar
1,1,Dieser Kommentar
1,2,geht über
1,3,mehrere Zeilen

Nun lese ich aus der ersten Tabelle table1 die Artikel aus und möchte gern die Kommentare aus der table2, die zu diesem Artikel gehören mit auslesen.

Die Idee ist folgende:
<?
$SQLString_artikel = "SELECT * FROM table1";  
$abfrage_artikel = odbtp_query($SQLString_artikel) or die;
while($artikel_array = odbtp_fetch_array($abfrage_artikel)){
	echo $artikel_array['art_name']."<br>";  
	$SQLString_kommentar = "SELECT * FROM table2 WHERE art_nr = ".$artikel_array['art_nr']." ORDER BY zeile";  
	$abfrage_kommentar = odbtp_query($SQLString_kommentar) or die;
	while($kommentar_array = odbtp_fetch_array($abfrage_kommentar)){
		echo $kommentar_arrray['kommentar']."<br>";  
	}
	echo "<hr>";  
}
?>

Leider scheitert der Code mit folgender Fehlermeldung: [ODBTPERR]Detached object in DATEINAME on line 40, mit welcher ich nichts anfangen kann.
Scheint er "verliert" irgendwas, aber was und warum?
Line 40 ist hier im Script die Zeile, wo die erste while-Schleife anfängt:
while($artikel_array = odbtp_fetch_array($abfrage_artikel)){

Wer kann mir helfen?

Kann man die Abfrage vielleicht doch zusammenfassen?

Vielen Dank für Eure Mühe.

Gruß Kuli

Content-ID: 106927

Url: https://administrator.de/contentid/106927

Ausgedruckt am: 24.11.2024 um 20:11 Uhr

Logan000
Logan000 23.01.2009 um 11:39:24 Uhr
Goto Top
Moin Moin

Kann man die Abfrage vielleicht doch zusammenfassen?
Warum machst du nicht nur eine Abfrage mit einem Join
SELECT * FROM table1 INNER JOIN table2 ON table1.art_nr = table2.art_nr

Gruß L.
kugelschreiber
kugelschreiber 23.01.2009 um 11:53:01 Uhr
Goto Top
Hallo logan000,

vielen Dank für Deine Hilfe.
Dein Code
> SELECT * FROM table1 INNER JOIN table2 ON table1.art_nr =
> table2.art_nr
> 
liefert mir die Abfrage auch dann den Artikelnamen, wenn keine Kommentare zu diesem in der table2 sind?
Und wenn Kommentare enthalten sind, wie rufe ich diese dann für den Artikel einzeln ab?
echo $artikel_array['art_name'];  
while(was?){
 echo WAS?;
}

Kann ich die Bedingung

ON table1.art_nr=table2.art_nr

erweitern mit

ON table1.art_nr=table2.art_nr AND table2.kommentar LIKE '%string%'

VIELEN VIELEN DANK FÜR DEINE HILFE!!!
Logan000
Logan000 23.01.2009 um 13:03:27 Uhr
Goto Top
Moin

liefert mir die Abfrage auch dann den Artikelnamen, wenn keine Kommentare zu diesem in der table2 sind?
Es werden alle Datensätze geholt die im Feld Art_nr den gleichen Eintrag haben.
Wenn also in table1.art_nr und table2.art_nr ein identischer Eintrag vorhanden ist, das Feld "Kommentar" aber leer, wird dennoch ein Datensatz (und damit wohl auch ein Artikelname) geholt.

Und wenn Kommentare enthalten sind, wie rufe ich diese dann für den Artikel einzeln ab?
Ich behersche leider kein PHP. Aber so wie ich das sehe bläst du die Datensätze in ein Array und läst dir dann das feld ausgeben, oder nicht?
	while($meinArray = odbtp_fetch_array($meinSqlStatement)){ 
		echo $MeinFeldwert['Feldname']."<br>";   
	} 

Kann ich die Bedingung
ON table1.art_nr=table2.art_nr
erweitern mit
ON table1.art_nr=table2.art_nr AND table2.kommentar LIKE '%string%'
Solte schon gehen aber sinniger wäre es im "ONPart" nur die Verknüpfungsbedingung zwischen den beiden Tabellen zu behandeln und das Filtern nach einem bestimmten Kommentar im WHERE zu machen.
Etwa so:
SELECT * FROM table1 INNER JOIN table2 ON table1.art_nr = table2.art_nr WHERE table2.kommentar LIKE '%string%'  

Gruß L.
kugelschreiber
kugelschreiber 23.01.2009 um 13:37:15 Uhr
Goto Top
Super das klingt doch mal schon nach was.
Ich werde es am WE probieren und noch mal Bescheid geben.

Dank Dir vielmaß!!!

Gruß und schönes WE.

Kuli