PHP Werte aus veschiedenen Tabellen ausgeben...

Konsumkind

Lt. Commander Pro
Registriert
Jan. 2007
Beiträge
1.034
Habe da mal folgende Frage:
Ich habe eine Abfrage wie folgt
$sql = 'SELECT user.*, gallerie.name, gallerie.unr FROM user, gallerie where user.unr = gallerie.unr';
Die funktioniert im Prinzip auch.

Der Knackpunkt ist aber dass ich zwar die Werte aus der Tabelle ganz normal via '.$row['user.unr'].' ausgeben kann die Werte aus der Tabelle Gallerie nach dem Schema '.$row['gallerie.unr'].' aber nicht.

Weiss jemand wie man das bewerkstelligen kann ohne in die Augabe nochmal eine Extraabfrage einzubauen?
 
Ich bin mir leider nicht sicher ob ich verstehe was du meinst..
du verscuhst praktisch
echo $row['gallerie.unr']
und das ergebnis davon ist leer?


Ich glaube du kannst dein Problem damit lösen, dass du hinter jedem select einen key schreibt
Code:
SELECT
    user.name as username
    gallerie.name as galleryname
    ...
FROM ...

und dann $row['username']
Ich mach das nur so. Ich glaube fast, dass man den namespace (user.) nicht beim row-array hinzuschreiben darf!
 
Zuletzt bearbeitet:
wieso versuchst du diesen schlüssel anzusprechen? durch user.unr = gallerie.unr legst du doch schon fest, dass user.unr den gleichen wert wie gallerie.unr haben muss. weswegen du gallerie.unr weglassen kannst und dich nur um user.unr kümmern musst.
 
Ich möchte aber einen zweiten Wert aus der Tabelle Gallerie ausgeben.
zB:
USER GALLERIE
unr | name unr | Bild | name
1 | Peter 1 | Bild1.jpg | vogel
2 | Heinz 2 | Bild2.jpg | haus

Was ich jetzt ausgeben möchte ist folgendes:

1, Peter, Bild1.jpg, Vogel
2, Heinz, Bild2.jpg, Haus

Ich dachte das müsste ja gehen wenn ich einfach die Namen aus der einen und die Bilder aus der anderen Tabelle abfrage bei denen unr gleich ist. Das geht zwar auch aber wie ist das mit 2 gleichnamigen spalten aus 2 unterschiedlichen Tabellen, also user.name und gallerie.name?

War anfangs wohl etwas ungeschickt ausgedrückt :D
 
Konsumkind schrieb:
Ich dachte das müsste ja gehen wenn ich einfach die Namen aus der einen und die Bilder aus der anderen Tabelle abfrage bei denen unr gleich ist. Das geht zwar auch aber wie ist das mit 2 gleichnamigen spalten aus 2 unterschiedlichen Tabellen, also user.name und gallerie.name?
der aufbau der tabellen ist ein wenig... misslungen. folgendes schlage ich erst mal vor (generell schlage ich auch vor den primärschlüssel id zu nennen, aber das ist je nach geschmack natürlich anders; ich bleibe jetzt mal bei id):

user:
Code:
id | name
1 | hans
2 | wurst
3 | peter
4 | ingolf
...
gallerie:
Code:
id | bild | name | user_id
1 | bild1.jpg | auto.jpg | 1
2 | bild2.jpg | pc.jpg | 1
3 | bild3.jpg | haus.jpg | 1
4 | bild01.jpg | garten.jpg | 2
5 | bild001.jpg | landschaft.jpg | 4
...
der sinn dahinter ist einfach, dass du mit der id eine fortlaufende nummer hast. dadurch kannst du erst ein mal datensätze voneinander getrennt und einzigartig behandeln. weiterhin musst du hier eine fremdschlüssel spalte (sprich gallerie.user_id) einrichten, wodurch du eine beziehung zwischen user und gallerie erstellen kannst (über die "normale" id geht dies ja nicht, da diese zahl immer fortlaufend nummeriert wird und diese spalte einzigartig [es darf ein wert nur ein mal auftreten] ist).
wenn du das nun so hast, musst du die daten mittels einer schleife auslesen, da du ja mehr als einen datensatz haben willst (ob mehrere vorhanden sind ist vorerst egal):
PHP:
<?php
  $sql = '
    SELECT
      `user`.*,
      `gallerie`.*
    FROM
      `user`,
      `gallerie`
    WHERE
      `user`.`id` = `gallerie`.`user_id`
  ';
  $res = mysql_query( $sql );
  
  while( $row = mysql_fetch_assoc( $res ) )
  {
    # code hier
  }
?>
 
Also ich hab zwar keine Ahnung ob das hier funktioniert und welche Lösungen MySQL für diese Problematik anbietet, aber so wie ich das verstanden hab ist das doch ein Fall für ein Inner Join?

Denn dann hat man ja immer alle Werte schön beieinander :)

Weiß zwar nicht wie MySQL das handhabt aber unter MSSQL sollte etwa dasgehen:

Code:
SELECT
u.unr,u.name,g.bild,g.name
FROM
user u
INNER JOIN gallery g ON u.unr=g.unr

Die andere Lösung erscheint mir hier etwas unsauber :)



so long
renegade
 
Ja so habe ichs jetzt auch gemacht. Funktioniert wunderbar :D
Danke für die Hilfe!
 
Zurück
Oben