Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Datenbanken

GELÖST

Mysql Abfrage aus 3 Tabellen

Mitglied: ChrisFah

ChrisFah (Level 1) - Jetzt verbinden

06.04.2011 um 00:10 Uhr, 3990 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 ..
Ähnliche Inhalte
Datenbanken
Mysql Select Befehl über 3 Tabellen?
gelöst Frage von rdklieDatenbanken6 Kommentare

Guten Tag zusammen! Ich habe eine kleine Frage bezüglich Mysql. Zur Fragestellung: Die Frage wäre "Welche Mitglieder organisieren Veranstaltungen ...

PHP
MYSQL Abfrage von 2 identischen Tabellen
gelöst Frage von datadexxPHP5 Kommentare

Hi an alle MYSQL Profis, ich hätte folgende Frage. Ich habe 2 Tabellen (kstamm, ustamm), diese sind vom Aufbau ...

Datenbanken
MYSQL Abfrage
gelöst Frage von datadexxDatenbanken20 Kommentare

Halo an alle MySQL Spezialisten! Wie kann ich denn am besten folgende Werte abfragen und berechnen? Ausgang für die ...

Datenbanken
Inkonsistente MySQL Tabellen wiederherstellen
Frage von AndroxinDatenbanken1 Kommentar

Moin, aus "Gründen" musste ich diverse MySQL Datenbanken von einer formatierten Festplatte wiederherstellen. In der Regel waren auch noch ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...