Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

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

Frage Entwicklung Datenbanken

Mitglied: kugelschreiber

kugelschreiber (Level 1) - Jetzt verbinden

23.01.2009, aktualisiert 11:25 Uhr, 9239 Aufrufe, 4 Kommentare

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:
01.
<? 
02.
$SQLString_artikel = "SELECT * FROM table1"
03.
$abfrage_artikel = odbtp_query($SQLString_artikel) or die
04.
while($artikel_array = odbtp_fetch_array($abfrage_artikel)){ 
05.
	echo $artikel_array['art_name']."<br>"
06.
	$SQLString_kommentar = "SELECT * FROM table2 WHERE art_nr = ".$artikel_array['art_nr']." ORDER BY zeile"
07.
	$abfrage_kommentar = odbtp_query($SQLString_kommentar) or die
08.
	while($kommentar_array = odbtp_fetch_array($abfrage_kommentar)){ 
09.
		echo $kommentar_arrray['kommentar']."<br>"
10.
11.
	echo "<hr>"
12.
13.
?>
Leider scheitert der Code mit folgender Fehlermeldung: [ODBTPERR][0]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
Mitglied: Logan000
23.01.2009 um 11:39 Uhr
Moin Moin

Kann man die Abfrage vielleicht doch zusammenfassen?
Warum machst du nicht nur eine Abfrage mit einem Join
01.
SELECT * FROM table1 INNER JOIN table2 ON table1.art_nr = table2.art_nr
Gruß L.
Bitte warten ..
Mitglied: kugelschreiber
23.01.2009 um 11:53 Uhr
Hallo logan000,

vielen Dank für Deine Hilfe.
Dein Code
01.
> SELECT * FROM table1 INNER JOIN table2 ON table1.art_nr = 
02.
> table2.art_nr 
03.
> 
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?
01.
echo $artikel_array['art_name']; 
02.
while(was?){ 
03.
 echo WAS?; 
04.
}
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!!!
Bitte warten ..
Mitglied: Logan000
23.01.2009 um 13:03 Uhr
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?
01.
	while($meinArray = odbtp_fetch_array($meinSqlStatement)){  
02.
		echo $MeinFeldwert['Feldname']."<br>";  
03.
	} 
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:
01.
SELECT * FROM table1 INNER JOIN table2 ON table1.art_nr = table2.art_nr WHERE table2.kommentar LIKE '%string%'
Gruß L.
Bitte warten ..
Mitglied: kugelschreiber
23.01.2009 um 13:37 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Datenbanken
MS-SQL-Server + T-SQL+Batch (4)

Frage von kallewirsch zum Thema Datenbanken ...

Datenbanken
gelöst Täglicher Export einer View aus MS SQL 2008 in Excel oder CSV (9)

Frage von Arafat zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (29)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...