我遇到了一个我无法弄清楚的问题。我正在进行SELECT查询以显示用户'朋友。我正在加入用户,朋友和profile_img表来获取用户信息,他们的个人资料图片以及朋友关系。
在好友列表中,如果friend_one
和friend_two
的{{1}}为2,则表示他们是朋友。这是我的查询检查,然后将其他表连接在一起以检索其他数据,例如用户名和图像。
查询似乎工作正常。另一方面,我的输出不是应该的。
在我的朋友表中,如果你正在查看第2行(参见下面的INSERT),friend_one是5,friend_two是1.我的查询获取这两个用户的数据,但是,当我尝试输出朋友列表时,我只想显示与我正在查看的用户个人资料相关联的好友列表。因此,如果我在朋友1的个人资料页面上,我想要显示的数据仅适用于朋友5。
status
我尝试使用if语句继续浏览与我所在的个人资料用户页面相匹配的朋友数据,并且它适用于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())
;
输出...这将显示1,但它没有& #39; t为friend_1
和friend_img
。
有谁知道为什么它适用于friend_username
,而不是其他数据?图像和用户名正在输出个人资料用户的数据,它应该是相反的,只是他们的朋友数据。
$friend_1
答案 0 :(得分:1)
如果我理解您的要求,我认为您正在寻找:
SELECT u.*, p.img
FROM users u
LEFT JOIN (
SELECT user_id, max(id) as mid
FROM profile_img
GROUP BY user_id
) mid ON u.id = mid.user_id
LEFT JOIN profile_img p ON p.id = mid.mid
WHERE u.id in (
SELECT friend_one FROM friends WHERE friend_two = 1 AND status = 2
UNION
SELECT friend_two FROM friends WHERE friend_one = 1 AND status = 2
);
好的,所以这里是PHP部分的更新...
<?php
foreach ($friend_total_rows as $friend_total_row) {
$friend_id = $friend_total_row['id'];
$friend_img_src = $friend_total_row['img'];
$friend_img = (!empty($friend_img_src)) ? '<img src="'.$friend_img_src.'" alt="Friend Image">' : '';
$friend_username = $friend_total_row['username'];
echo '<div class="friend-list-block">
<div class="friend-list-block-img">' .
$friend_img .
'<div class="friend-list-block-details">'. $friend_id . " "
. $friend_username .
'</div></div></div>';
}