Mehrere Tabellen gleichzeitig auslesen

Nordglanz3000

Grünschnabel
Habe die beiden Tabellen users und users_extended. Mit der folgenden DB-Abfrage werden alle User ausgegeben, die einen uid-wert haben, der dem wert von usersextended_uid entspricht:

Code:
$queryParts['SELECT'] = 'a.*';
          $queryParts['FROM'] = 'users a, users_extended b';
          $queryParts['WHERE'] =" a.uid=b.usersextended_uid ";

Meine Frage ist, wie kann ich dieses ausweiten, so das ich anstatt nur die Datensätze der users Tabelle, noch Datensätze von einer weiteren Tabelle ausgeben lassen kann, auch wieder, alle Datensätze aus der Tabelle sollen angezeigt werden, die einen uid-wert haben, der als usersextended_uid in der users_extended Tabelle vorhanden ist.

Mfg, Nordi
 
läßt du vor dem a.* das a. weg, werden alle Spalten aus den beiden Tabellen gelesen, nicht nur die aus Tabelle users (Alias a).
$queryParts['SELECT'] = '*';
$queryParts['FROM'] = 'users a, users_extended b';
$queryParts['WHERE'] =" a.uid=b.usersextended_uid ";
 
Danke, es klappt natürlich - fast. den Grund dafür das nur fast habe ich soeben gefunden: Es wird ja von mehreren Tabellen ausgelesen, die beide das feld uid haben, hier kann es zu Überschneidungen kommen, wenn beide die selbe uid haben.
dem begegne ich, indem ich beim inserten einer neuen row, noch einen Kürzel für die jeweilige Tabelle vor die uid voranstelle also bei einer uid "15" trage ich wenn der datensatz aus der 1. tabelle kommt "0115" ein. Dazu gibt es in der Tabelle users_extended noch ein neues Feld namnes extended_uid_plus wo dann zb "0155" eingetragen wird (datensatz 55 aus tabelle 1).
Meine Frage nun, wie bekomme ich die DB-Abfrage umgestellt, so das die where-bedingung etwa so aussieht (pseudo-code):

Code:
$varT1 = 01;
$queryParts['WHERE'] =" '".$varT1."'.a.uid=b.usersextended_uid ";

Ich hoffe ich habe das verständlich genug formuliert und es wäre schön wenn jemand weiß, wie man diese nicht ganz triviale Abfrage mit der richtigen Syntax umsetzen kann...
 
Das Problem ist, ich habe mehrere Tabellen, wobei die eine Tabelle zum Beispiel das Feld "title" enthalten kann, die andere Tabelle hat das Feld möglicherweise nicht, dafür aber ein Feld namens "Beschreibung".
Ich lese die Tabellen aber gemeinsam aus, und möchte gerne für jeden Datensatz auch eine Überschrift ausgeben. Schwierig ist hierbei, das ich zum Beispiel bei Datensätzen aus Tabelle1 das Feld Title und bei Tabelle2 das Feld Beschreibung ausgeben möchte. In einer While-Schleife sieht das normalerweise, bei nur einem in Frage kommenden Feld so aus:

Code:
        while ($row = mysql_fetch_array($result)) {

$marker['###TITEL###'] = $row['title']; 

                    
                    }

Wie bekommt man es hin, das für $row['title'] sozusagen ein flexibler Wert eingesetzt wird, so das im Falle das das Feld "title" vorhanden ist, eben title ausgelesen wird und wenn description vorhanden ist, description ausgelesen wird?

Danke und Gruß, Nordy
 
Kann mir jemand sagen warum diese Abfrage nicht funktioniert?

Code:
$query = "SELECT a.*,title AS flexible FROM messages a LEFT JOIN data_connector c ON c.data_uid = a.uid WHERE c.data_uid = a.uid
 
 UNION
 
 SELECT b.*,title AS flexible FROM news a LEFT JOIN data_connector c ON c.data_uid = b.uid WHERE c.data_uid = b.uid";

Es funktioniert wenn ich das union und das zweite select weglasse, ich möchte aber Daten aus beiden Tabellen holen.

Danke für eure Antworten...
 
Prüfe beide Select mit phpMyAdmin
Anschliessend prüfst du dein UNION-Query mit phpMyAdmin.

Dann kannst du uns sagen, was für eine Fehlermeldung kommt. 'Funktioniert nicht' ist nicht aussagekräftig.
 
Moin Nordglanz3000,

Unabhängig von yaslaws Hinweis ist mit Sicherheit
- falsch: der Alias b im zweiten SELECT (...FROM news a) -> richtiger Alias "b"
- zumindest grenzwertig: in einem UNION mit "Select [alias1].* Union Select [alias2].*" zu arbeiten.

Sprich die Feldern nicht mit ".*", sondern jeweils mit Namen an bzw im ersten Select mit den Namen, die du im Resultset haben willst..
Und BTW, wenn deine Tabellen verschiedene Namen, aber sonst eine identische Struktur haben, dann drängt sich mir der Verdacht auf, es wäre mal wieder Zeit für ein Stündchen DB-Redesign.

Grüße
Biber
[OT] Ps. Dein Nick hört sich an wie ein Teppichreiniger in einer Dauerwerbesendung - wie kommst du denn auf so was? ;-)
[/OT]
 
Zuletzt bearbeitet:
Zurück