Ich renne in ein Problem, das ich nicht herausfinden kann. Ich mache eine SELECT-Abfrage, um die Freunde der Benutzer anzuzeigen. Ich schließe mich einer Tabelle für Benutzer, Freunde und profile_img an, um die Benutzerinformationen, ihr Profilbild und die Freundschaftsbeziehung abzurufen.Query-Ausgabe nicht konsistent zu If-Bedingung
In der Freundes-Tabelle, wenn friend_one
und friend_two
eine status
von 2 haben, bedeutet das, dass sie Freunde sind. Dies ist, was meine Abfrage sucht und dann die anderen Tabellen zusammenfügt, um die anderen Daten wie den Benutzernamen und das Bild abzurufen.
Die Abfrage scheint gut zu funktionieren. Mein Output ist jedoch nicht das, was es sein sollte.
In meiner Freundes-Tabelle, wenn Sie Zeile 2 betrachten (siehe INSERT unten), ist friend_one 5 und friend_two ist 1. Meine Abfrage erhält die Daten für diese beiden Benutzer jedoch, wenn ich versuche, den Freund auszugeben Liste, ich möchte nur die Freundesliste anzeigen, die mit dem Benutzerprofil verknüpft ist, das ich gerade betrachte. Also, wenn ich auf Freund 1 der Profilseite, die Daten, die ich zeigen möchte, ist nur für Freund 5.
CREATE TABLE `friends` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`friend_one` int(11) NOT NULL DEFAULT '0',
`friend_two` int(11) NOT NULL DEFAULT '0',
`status` enum('0','1','2') COLLATE utf8_unicode_ci DEFAULT '0',
`date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `friend_two` (`friend_two`)
);
INSERT INTO `friends`
VALUES
(1, 1, 2, 2, NOW()),
(2, 5, 1, 2, NOW())
;
ich ein versuchter if-Anweisung vorbei an den Freund Daten fortzusetzen entspricht, in der die Seite Profil Benutzer Ich war auf und es funktioniert für die friend_1
Ausgabe ... die würde 1 zeigen, aber es tut es nicht für die friend_img
und friend_username
.
Kann jemand sehen, warum es für $friend_1
arbeitet, aber nicht den Rest ihrer Daten? Das Bild und der Benutzername geben die Daten des Profilbenutzers aus, wobei es das Gegenteil und nur die Daten ihrer Freunde sein sollten.
$friend_status = 2;
$friend_sql = "
SELECT f.*,
u1.*,
u2.*,
p1.*,
p2.*,
IFNULL(p1.img, 'profile_images/default.jpg') AS img1,
IFNULL(p2.img, 'profile_images/default.jpg') AS img2
FROM friends f
LEFT JOIN users u1 ON u1.id = f.friend_one
LEFT JOIN users u2 ON u2.id = f.friend_two
LEFT JOIN (
SELECT user_id, max(id) as mid
FROM profile_img
GROUP BY user_id
) max1 ON u1.id = max1.user_id
LEFT JOIN (
SELECT user_id, max(id) as mid
FROM profile_img
GROUP BY user_id
) max2 ON u2.id = max2.user_id
LEFT JOIN profile_img p1 ON p1.user_id = f.friend_one and p1.id = max1.mid
LEFT JOIN profile_img p2 ON p2.user_id = f.friend_two and p2.id = max2.mid
WHERE (friend_one = :profile_user or friend_two = :profile_user)
AND status = :total_status
";
$friend_stmt = $con->prepare($friend_sql);
$friend_stmt->execute(array(':profile_user' => $profile_user, ':total_status' => $friend_status));
$friend_total_rows = $friend_stmt->fetchAll(PDO::FETCH_ASSOC);
$count_total_friend = $friend_stmt->rowCount();
?>
<div id="friend-list-container">
<div id="friend-list-count">Friends <span class="light-gray"><?php echo $count_total_friend; ?></span></div>
<div id="friend-list-image-container">
<?php
foreach ($friend_total_rows as $friend_total_row) {
$friend_1 = $friend_total_row['friend_one'];
$friend_2 = $friend_total_row['friend_two'];
$friend_img_src = $friend_total_row['img'];
$friend_img = '<img src="'.$friend_img_src.'" alt="Friend Image">';
$friend_username = $friend_total_row['username'];
if($friend_1 !== $profile_user) {
echo '<div class="friend-list-block">
<div class="friend-list-block-img">' .
$friend_img .
'<div class="friend-list-block-details">'. $friend_1 . " "
. $friend_username .
'</div></div></div>';
}
Ich bin mir nicht sicher, was genau Sie fragen? Auf meiner Seite (friend_1) alle Daten von meinen Freunden anzeigen (friend_2, 3 etc)? – boroboris
Wenn ich auf einer Benutzerseite mit einer ID von 1 bin (siehe mein Beispiel oben), sollte die einzige Ausgabe von Benutzer 5 sein. Meine Ausgabe auf meiner Seite zeigt Benutzer 5 als '$ friend_one', aber den Benutzernamen und img ist von Benutzer 1. – Paul