查询输出与if条件不一致

时间:2016-11-29 18:48:04

标签: php mysql if-statement pdo foreach

我遇到了一个我无法弄清楚的问题。我正在进行SELECT查询以显示用户'朋友。我正在加入用户,朋友和profile_img表来获取用户信息,他们的个人资料图片以及朋友关系。

在好友列表中,如果friend_onefriend_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_1friend_img

执行此操作

有谁知道为什么它适用于friend_username,而不是其他数据?图像和用户名正在输出个人资料用户的数据,它应该是相反的,只是他们的朋友数据。

$friend_1

Fiddle

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>';

    }