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:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 106927
Url: https://administrator.de/contentid/106927
Ausgedruckt am: 24.11.2024 um 20:11 Uhr
4 Kommentare
Neuester Kommentar
Moin
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.
Etwa so:
Gruß L.
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.ON table1.art_nr=table2.art_nr
erweitern mit
ON table1.art_nr=table2.art_nr AND table2.kommentar LIKE '%string%'
Etwa so:
SELECT * FROM table1 INNER JOIN table2 ON table1.art_nr = table2.art_nr WHERE table2.kommentar LIKE '%string%'
Gruß L.