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
GELÖST

Mysql Abfrage aus 3 Tabellen

Frage Entwicklung Datenbanken

Mitglied: ChrisFah

ChrisFah (Level 1) - Jetzt verbinden

06.04.2011 um 00:10 Uhr, 3941 Aufrufe, 6 Kommentare

Hallo, ich versuche bereits seit Stunden ein Problemchen zu lösen. Leider steh ich auf der Leitung....

Ich habe eine Mysql (V5.1) Abfrage aus 2 Tabellen:
Hier die verkürzte Version:

01.
$obj_q_r = "SELECT p.p_id, p.p_titeltext, p.plz, p.ort,  
02.
					o.o_id, o.projekt_id, o.einiges_andere_noch  
03.
					FROM ".TABLE_OBJEKTE." o, ".TABLE_PROJEKTE." p  
04.
					WHERE o.projekt_id = '".$p_id."'  
05.
					AND p.p_id = '".$p_id."'  
06.
					ORDER BY o.o_id ASC";
Zu jedem der Ergebnisse möchte ich eine weitere Abfrage machen, die aus einer dritten Tabelle die Anzahl der Einträge mit einer bestimmten id zählt wobei egal ist, ob das Ergebnis Null 0 ist oder nicht. Die einzelne Abfrage, die ich zu jedem einzelnen Ergebnis machen müsste wäre so:
01.
while ($result = mysql_fetch ......) { 
02.
   $query = "SELECT COUNT(k_id) as zaehler  
03.
                     FROM TABELLE_KONTAKTE k   
04.
                     WHERE k.objekt_id = '".$result['o_id']."' "; 
05.
}
Gibt es nun eine Möglichkeit, diese beiden queries zu einer einzigen zusammenzufassen ???
Leider hab ich schon einiges probiert (Left Join ...), leider kein Erfolg...

Lg und Danke im Voraus, Chris
Mitglied: Biber
06.04.2011 um 01:07 Uhr
Moin ChrisFah,

versuch es mal so:
01.
<code>$obj_q_r = "SELECT p.p_id, p.p_titeltext, p.plz, p.ort,  
02.
         o.o_id, o.projekt_id, o.einiges_andere_noch, 
03.
         k.zaehler  
04.
        FROM ".TABLE_OBJEKTE." o, ".TABLE_PROJEKTE." p, 
05.
             (SELECT k_id, Count(k_id) as zaehler FROM TABELLE.KONTAKTE 
06.
               group by k_id) k  
07.
	WHERE o.projekt_id = '".$p_id."'  
08.
	AND p.p_id = o.projekt_id 
09.
        AND k.k_id = o.o_id 
10.
	ORDER BY o.o_id ASC";
[ungetestet]

Grüße
Biber
Bitte warten ..
Mitglied: ChrisFah2
06.04.2011 um 20:36 Uhr
Hallo,
DANKE für die rasche Antwort. Leider nicht ganz befriedigend:

Es wird zwar korrekt gezählt, abeer nur jene Objekte ausgewählt, die auch in der Tabelle kKontakte einen Eintrag haben. Es sollte aber so sein, das alle vorhandenen Objekte gelistet werden, auch wenn kein Kontakt Eintrag da ist. Wo Kontakt einträge da sind, sollen sie für das betreffende Objekt zusammengezählt werden....

Hier nochmal meine derzeitige query:
01.
$obj_q_r = "SELECT p.p_id, p.p_titeltext, p.plz, p.ort,  
02.
					o.o_id, o.projekt_id, o.o_name, o.immobilie, o.erwerb, o.o_titeltext, o.undvielesmehr,  
03.
					k.zaehler    
04.
					FROM ".TABLE_OBJEKTE." o, ".TABLE_PROJEKTE." p,  
05.
					(SELECT objekt_id, COUNT(k_id) as zaehler FROM ".TABLE_KONTAKTE." group by objekt_id) k   
06.
					WHERE o.projekt_id = '".$p_id."'  
07.
					AND p.p_id = '".$p_id."'  
08.
					AND k.objekt_id = o.o_id  
09.
					ORDER BY o.o_id ASC";
???
Wie kann ich das lösen ???

Lg, Chris
Bitte warten ..
Mitglied: Biber
06.04.2011 um 20:59 Uhr
Moin ChrisFah und ChrisFah2, ihr beiden,

sorry, ihr hattet zwar den LEFT JOIN erwähnt, aber den hab ich verdrängt.

Dann so in etwa:

01.
$obj_q_r = "SELECT p.p_id, p.p_titeltext, p.plz, p.ort,  
02.
	   o.o_id, o.projekt_id, o.o_name, o.immobilie, o.erwerb, 
03.
           o.o_titeltext,o.undvielesmehr,  
04.
	  IfNull(k.zaehler, 0)    
05.
	FROM ".TABLE_OBJEKTE." o left join 
06.
	(SELECT objekt_id, COUNT(k_id) as zaehler  
07.
              FROM ".TABLE_KONTAKTE." group by objekt_id) k  
08.
              ON o.o_id =k.objekt_id , 
09.
             ".TABLE_PROJEKTE." p,  
10.
		WHERE o.projekt_id = '".$p_id."'  
11.
		AND p.p_id = '".$p_id."'  
12.
		AND k.objekt_id = o.o_id  
13.
		ORDER BY o.o_id ASC";
Aus dem INNER JOIN ist ein LEFT JOIN von Tabelle o [Objekte] auf die Tabelle [AggregierteKontakte] k geworden,
zusätzlich ist in der SELECT-Feldliste aus dem Feld "k.zaehler" ein "IFNull(k.zaehler, 0)" geworden.
--> FALLS bei mySQL ein Count(NULL) auch NULL ergibt, wie ich vermute.
--> Das kann ich nicht prüfen jetzt. Ist alles ungetestet.


Aus der WHERE-Bedingung kann das "o.o_id=k.objekt_id" rausfliegen.

Grüße
Biber
Bitte warten ..
Mitglied: ChrisFah2
06.04.2011 um 21:28 Uhr
Hallo again,

der ChrisFah2 ist noch aus "alter" Zeit, als ich meinen Userlogin vergessen hatte und nun loggt mich der FF automatisch damit ein. Egal ...

Also:

Leider auch nicht ganz, es werden auch nur jene Datensätze angezeigt, die auch in den Kontakten angeführt sind.

Aber ich lass es gut sein, der zeitaufwand steht nicht dafür. Ich mach eine weitere query im loop durch die erste query und gut is.

Trotzdem vielen Dank für deine Mühe und die nächtlichen Antworten!!!!
Lg, Chris
Bitte warten ..
Mitglied: Biber
06.04.2011 um 21:42 Uhr
Moin Chris,

okay, ich besteh ja gar nicht drauf, dass es im zweiten Versuch klappt...;-9

Aber:
Ich hab gerade gesehen, dass ich fälschlicherweise in dem Statement oben immer noch das "AND k.objekt_id = o.o_id " in der WHERE-Bedingung stehen habe.
(einfach übersehen).

Damit werden natürlich nach wie vor auch nur die angezeigt, die...<bla>... wie von dir beschrieben.
Machst du bitte noch einen Test mit ohne diese Zeile?

Grüße
Biber
Bitte warten ..
Mitglied: ChrisFah2
06.04.2011 um 22:37 Uhr
HEUREKA !!!
Hallo, jetzt werden alle Ergebnisse gelistet, wie es sein soll, jedoch mit dem key im Array hat es was :
Hier der Key , der eigentlich zaehler
[IfNull(k.zaehler, 0)] => 1
Die Werte stimmen jedoch.

Habe es nun so gelöst, hoffe es stimmt so (hier die ganze query):
01.
$obj_q_r = "SELECT p.p_id, p.p_titeltext, p.plz, p.ort,  
02.
					o.o_id, o.projekt_id, o.o_name, o.immobilie, o.erwerb, o.o_titeltext, o.verkauft, o.nutzflaeche, o.gesamtflaeche,  
03.
					o.zimmer, o.grund, o.stockwerk, o.keller, o.keller_txt, o.garage, o.stellplaetze, o.heizung, o.heizung_txt,  
04.
					o.bauweise, o.bauweise_txt, o.energiekz, o.ausstattung, o.preis, o.preis_ab, o.preis_bis, o.preis_schl,  
05.
					o.mietpreis_netto, o.betriebskosten, o.mietpreis_total, o.mindestgebot, o.vadium, o.verkehrswert, o.fertig_m,  
06.
					o.fertig_y, o.kurzbeschreibung, o.pic0,   
07.
	  				IfNull(k.zaehler, 0) as zaehler      
08.
					FROM ".TABLE_OBJEKTE." o left join 
09.
					(SELECT objekt_id, COUNT(DISTINCT interessenten_id)  as zaehler 
10.
     		         FROM ".TABLE_KONTAKTE." group by objekt_id) k    
11.
      		        ON o.o_id =k.objekt_id ,  
12.
      		       ".TABLE_PROJEKTE." p  
13.
					WHERE o.projekt_id = '".$p_id."'  
14.
					AND p.p_id = '".$p_id."'  
15.
					AND p.p_status = '1'  
16.
					AND p.p_system_status = '1'  
17.
					AND o.o_status = '1'  
18.
					AND o.o_system_status = '1'  
19.
					ORDER BY o.o_id ASC";
Das Problem mit dem key habe ich durch
01.
IfNull(k.zaehler, 0) as zaehler 
gelöst.
Kannst bitte nochmal drüberschaun, daß die beiden "as zaehler" nicht überschreiben ...

Danke, lg, Chris
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
PHP
MySQL-Abfrage mit php: Wert + true bzw. false (2)

Frage von tomolpi zum Thema PHP ...

Datenbanken
gelöst MYSQL Abfrage (20)

Frage von datadexx zum Thema Datenbanken ...

Datenbanken
gelöst Schleifen in SQL-Abfrage bei 2 Tabellen (2)

Frage von Aximand zum Thema Datenbanken ...

Datenbanken
gelöst Row Number bei einer Abfrage sinnvoll einsetzen (1)

Frage von Aximand zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...