Nur 1 Foto von mehreren Mitglieder anzeigen

proloser

Erfahrenes Mitglied
Hallo,

ich habe eine Datenbank mit Bilder und der dazugehörigen "UserID":

id | user_id | photo

- UserID: 5
1 | 5 | a.jpg
2 | 5 | b.jpg
3 | 5 | c.jpg

UserID: 7
4 | 7 | d.jpg
5 | 7 | e.jpg
6 | 7 | f.jpg

Nun geb ich die Fotos aus:

PHP:
  $res = mysql_query("SELECT * FROM `photos`"); 
  while($row = mysql_fetch_array($res)){ 
    $photo_list = "<img src=\"upload/images/$row[photo]\">";
  }

Nun zu meinem Problem:

Ich möchte nicht alle Fotos ausgeben sondern immer nur 1 Foto pro Benutzer.

Bei dem Beispiel dürfen also nur die 2 Fotos ausgegeben werden:
1 | 5 | a.jpg
4 | 7 | d.jpg


Wie mach ich das am besten?

MfG proloser
 
Hi,
ich würde in der while-Schleife eine Abfrage einbauen ob zu der User-Id schon ein Bild verarbeitet wurde. Also in etwa so:

PHP:
$alte_id = 0;

$res = mysql_query("SELECT * FROM `photos`"); 
while($row = mysql_fetch_array($res)){ 
   
    // Bild nur ausgeben wenn die User-Id noch nicht dran war
    // es kann also auch noch kein Bild ausgegeben worden sein
    if( $alte_id != $row['userid'] )
    {
        $photo_list = "<img src=\"upload/images/$row[photo]\">";
    }
    $alte_id = $row['userid'];
}

Damit das so funktioniert muss das Result-Set nach den User-IDs sortiert sein. Ansonsten muss man die alten User-IDs in ein Array schreiben und immer Abfragen ob die aktuelle User-ID schon im Array drin steht.

mfg.Fide
 
Das problem ist damit ich es nicht nach der UserID sortieren kann, hab jetzt mit dem Array versucht aber komm da nicht ganz klar.

Könntest du mir das noch etwas genauer erklären ...
 
Dazu gibt es die Funktion "in_array( )".
Es müsste dann in etwas so aussehen:

PHP:
$alte_id = array();
$i = 0;

$res = mysql_query("SELECT * FROM `photos`"); 
while($row = mysql_fetch_array($res)){ 
   
    if( !(in_array( $row['userid'], $alte_id )) )
    {
        $photo_list = "<img src=\"upload/images/$row[photo]\">";
    }
    $alte_id[$i] = $row['userid'];
    $i++;
}

Hier ist die Funktion erklärt:
http://de.php.net/in_array

mfg.Fide
 
Wus? ... Das kannst du SQL auch erledigen lassen:
Code:
SELECT `userID`, `imageSrc` FROM `table` GROUP BY `userID`
Dabei wurde immer das erste genommen.

Oder, wenn du ein zufälliges pro Benutzer haben willst:
Code:
SELECT * FROM (SELECT `userID`, `imageSrc` FROM `table` ORDER BY RAND()) AS RandTable GROUP BY `userID`

Die Bezeichnungen der Felder musst natürlich auf deine anpassen.
 
Zurück