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, 9392 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 ..
Ähnliche Inhalte
Datenbanken
gelöst MS SQL Abfragen und Formulare in Webseite einbinden (3)

Frage von Machello zum Thema Datenbanken ...

Microsoft
gelöst Verbindung zu MS SQL Server 2016 nicht möglich (5)

Frage von Baitahook zum Thema Microsoft ...

Datenbanken
gelöst Daten aus Excel in MS SQL Server übernehmen (7)

Frage von Balu418xx zum Thema Datenbanken ...

Backup
gelöst Backup-Software für IIS und MS SQL (2)

Frage von Ravelux zum Thema Backup ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Batch & Shell
Skripterstellung Lehrling (22)

Frage von 133119 zum Thema Batch & Shell ...

Exchange Server
Microsoft Exchange Weiterleitung mit anderer primären E-Mail Adresse (14)

Frage von Rene12345 zum Thema Exchange Server ...

Windows Userverwaltung
gelöst Wie verfahrt Ihr mit den Windows-Benutzerkonten und -dateien von ausgeschiedenen Mitarbeitern? (14)

Frage von Bl0ckS1z3 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Devolo DLAN 500 pro Wireless+ (13)

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