Zwei Listen, 1 Wert.....

maxikey

Erfahrenes Mitglied
Heyho,
Ich habe folgendes Problem:
Ich habe eine Tabelle in der jeder User eine eigene Spalte hat. In dieser sind die IDs seiner Freunde abgespeichert. Nun will ich diese auf dessen Seite anzeigen und aus einer anderen Tabelle die Namen der Freunde ermitteln. Ich habe aber ein Problem beim Zusammenfügen dieser Codes.

Abrage der IDs...
PHP:
$sql = "SELECT $username FROM Freunde";
$qry = mysql_query($sql) or die(mysql_error());

while($usr = mysql_fetch_object($qry))
{
 
}


Abfrage der Namen
PHP:
$sql = "SELECT ID,username FROM userlist WHERE ID = $usr->$username";
$qry = mysql_query($sql) or die(mysql_error());

while($usr = mysql_fetch_object($qry))
{
  echo "$usr->username ";
  echo "'s";
  echo "<a href=\"details1.php?ID=$usr->ID\">Detailseite</a><br>"; echo "<br>";
}

Wie soll ich das machen?

DANKE IM VORAUS

MFG Maxi
 
Zuletzt bearbeitet:
Fehlt hier nicht ein WHERE in der Abfrage
PHP:
$sql = "SELECT $username FROM Freunde";

da du ja die Freunde nur eines Users anzeigen lassen willst.
 
Das ganze lässt sich über einen Inner Join in einer Abfrage relativ einfach lösen:

SQL:
SELECT
	`user`.`ID`,
	`user`.`username`
FROM
	`Freunde` AS `friend`
RIGHT JOIN
	`userlist` AS `user` ON
	`friend`.`userid` = `user`.`ID`
WHERE
	`friend`.`username` = 'alice'
;

Ob da nun alles zusammenpasst, kann ich auf Grund fehlender Strukturkenntnisse nicht einschätzen, das Prinzip ist aber einfach:
Es werden alle Datensätze aus der Freunde-Tabelle ausgewählt, die mit der Person als befreundet gekennzeichnet sind (In dem Fall ist alice die Person, deren Freunde wir auswählen wollen).
Anschließend werden die entsprechenden Datensätze aus der Benutzer-Tabelle rechts angefügt (On-Klausel beachten).

Anmerkung: Würde ein Left Join verwendet werden, bekämen wir auch Freunde zurück, die eventuell gar nicht als Nutzer existieren. Mittels des Right Joins werden alle NULL-Verknüpfungen sofort ausgeschlossen.
 
Erstmals kurz die Tabelle 'Freunde':

Maxi--Alice-..... <-Die Person...Jeder hat per ADD COLUMN eine eigene Spalte bekommen
1------8---------1 <-Die IDs seiner Freunde...jeder Freund wird per INSERT INTO hinzugefügt
2------5---------3
3------2---------8

Zuerst müssen wir also die IDs der Freunde auslesen und anschließend aus 'Userlist' den Namen anhand der ID ermitteln und ausgeben....

MFG Maxi
 
Zuletzt bearbeitet:
Würdest du die Datenbankstruktur normalisieren, könntest du meinen Ansatz von oben verwenden.

Beispielstruktur:
SQL:
CREATE TABLE `users` (
	`id`	INT UNSIGNED NOT NULL AUTO_INCREMENT,
	`name`	VARCHAR(100) NOT NULL,
	PRIMARY KEY	( `id` ),
	UNIQUE KEY	( `name` )
);

CREATE TABLE `friends` (
	`lft`		INT UNSIGNED NOT NULL,
	`rgt`		INT UNSIGNED NOT NULL,
	UNIQUE KEY	( `lft`, `rgt` )
);

Abfrage (nicht optimiert):
SQL:
SELECT
	`user`.`name`
FROM
	`friends` AS `friend`
LEFT JOIN
	`users` AS `user` ON
	`user`.`id` IN ( `friend`.`lft`, `friend`.`rgt` ) AND
	`user`.`id` != 'eigene ID'
WHERE
	'eigene ID' IN ( `friend`.`lft`, `friend`.`rgt` )
;
 
Zurück