Daten aus mehreren Tabellen ausgeben.

UnoDosTres

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem:

ich möchte Daten aus 3 Tabellen in EINER schleife ausgeben.
Hab da irgendwie ein verständnisproblem. Mein bisheriger Code:

PHP:
 $abfrage = "SELECT id,firmenname,name1,name2,name3,tele1,tele2,tele3,email1,email2,email3,fax FROM ansprechpartner WHERE firmenname = '$kunde'";
		  $ergebnis = mysql_query($abfrage);
		 
		   		while($row = mysql_fetch_object($ergebnis))
				{ # Ausgabe der Daten
	#....MIT PHP generierter HTML Code um die daten in einer Tabelle auszugeben
               # ....hier sollen aber noch die Daten aus den 2 anderen Tabellen ausgegeben werden
}

Wie mache ich das am besten? Ist es evtl möglich die SQL Abfrage so zu gestallten das ich mehre Tabellen gleichzeitig abfrage
 
Du solltest schreiben, welche Felder Deine Tabellen beinhalten, wie diese Tabellen heißen, auf welche Weise die Tabellen miteinander verbunden sind und welche Felder Du anzeigen willst. Sonst wird es schwer, Dir zu helfen.
UnoDosTres hat gesagt.:
Ist es evtl möglich die SQL Abfrage so zu gestallten das ich mehre Tabellen gleichzeitig abfrage
Natürlich ist das möglich. Mit Subquerys oder Joins ist das kein Problem. Das Handbuch erzählt mehr dazu:
SELECT-Syntax
JOIN-Syntax
Subquery Syntax

Gruß hpvw
 
Also es gibt die Tabelle kunden mit den Spalten:
firmenname,webseite,bemerkung

Tabelle partner mit den Spalten:
firmenname, name1,tele1,name2,tele2

Die zuordnung welche Tabelle zu welcher gehört geschieht über
die Variable firmenname.
 
Das geht eigentlich ganz einfach:

Du musst nur in dem FROM - Tag die zweite Tabelle angeben

z.B.: SELECT deine Felder FROM tabelle1, tabelle2, tabelle3 WHERE kundenname = '$var'
 
Hab jetzt folgenden Code:

PHP:
 $abfrage = "SELECT id,firmenname,name1,name2,name3,tele1,tele2,tele3,email1,email2,email3,fax,bemerkung,FTPHostname,FTPUsername,FTPPasswd,webseite,firmenname FROM ansprechpartner,kunden WHERE firmenname = '$kunde'";
		  $ergebnis = mysql_query($abfrage);

so bekomme ich aber den Fehler:
Code:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/xxxxxx/xxxxxxx/intern.php on line 942

Ich hatte es grade auch mit der Abfrage:
SELECT A.firmenname,B.name1....FROM ansprechparter as A .....

Da wurde mir auch alle Daten ausgegeben. Allerdings wurde die Tabelle etliche male untereinander gezeichnet. Also kann es ja so auch nicht sein.
 
Die Fehlermeldung besagt, dass der der mysql_fetch_object()-Funktion übergebene Parameter keine gültige MySQL-Ergebnisressource ist. Dies ist meistens auf eine fehlgeschlagene Abfrage zurückzuführen.
In deinem Fall gibt es einen Syntaxfehler in der Deklaration der Datenbankabfrage, denn ich glaube, dass „FTP“ und „Username“ zusammengeschrieben werden müsste.
 
Die leerstelle hat sich nur beim Einstellen in das Forum eingeschlichen. Im Code ist das richtig.

Ist denn die Abfrage grundsätztlich richtig? Sprich kann ich die so stellen?
 
Grundsätzlich scheint die Abfrage korrekt zu sein – solange alle notierten Spalten und Tabellen existent sind. Dennoch würde ich die Abfrage etwas modifirzieren:
PHP:
<?php

	…
	$abfrage = "
		SELECT
		        `id`,
		        `firmenname`,
		        `name1`,
		        `name2`,
		        `name3`,
		        `tele1`,
		        `tele2`,
		        `tele3`,
		        `email1`,
		        `email2`,
		        `email3`,
		        `fax`,
		        `bemerkung`,
		        `FTPHostname`,
		        `FTPUsername`,
		        `FTPPasswd`,
		        `webseite`,
		        `firmenname`
		  FROM
		        `ansprechpartner`,
		        `kunden`
		  WHERE
		        `firmenname` LIKE '".mysql_real_escape_string($kunde)."'
		";
	$ergebnis = mysql_query($abfrage) or die(mysql_error());   // or-die()-Konstrukt zur Fehlerdiagnose
	…

?>
 
UnoDosTres hat gesagt.:
Ist denn die Abfrage grundsätztlich richtig? Sprich kann ich die so stellen?
Nein, es fehlt die Verknüpfung der Tabellen. Ich verwende auch sehr ungern diese Pseudo-Join-Syntax, sondern schreibe den Join lieber aus:
Code:
SELECT
  kunden.id,
  kunden.firmenname,
  ansprechpartner.name1,
  ansprechpartner.name2,
  ansprechpartner.name3,
  ansprechpartner.tele1,
  ansprechpartner.tele2,
  ansprechpartner.tele3,
  ansprechpartner.email1,
  ansprechpartner.email2,
  ansprechpartner.email3,
  kunden.fax,
  kunden.bemerkung,
  kunden.FTPHostname,
  kunden.FTPUsername,
  kunden.FTPPasswd,
  kunden.webseite
FROM kunden
LEFT JOIN ansprechpartner 
  ON (kunden.firmenname = ansprechpartner.firmenname)
WHERE kunden.firmenname = '$kunde'
Bei der Tabellenzuordnung in der Projektion musst Du noch mal schauen, ob ich das richtig gemacht habe. Da gleiche Felder in den Tabellen existieren, könnte [phpf]mysql_error[/phpf] bemängeln, dass Teile der Projektion (EDIT: und die Bedingung in der WHERE-Klausel) nicht eindeutig waren, wenn man sich diese Fehlermeldung denn anzeigen würde.

Bei dem Tabellenlayout solltest Du Dich übrigends mal mit der Normalisierung beschäftigen.

Gruß hpvw
 
Zurück