PHP   发布时间:2022-04-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-如何从表中的2个值(其中1个是正确的)内联接正确的值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我需要选择并内部加入与当前用户相反的正确u1或u2,以显示具有正确图片/ id的正确朋友列表

评估编号

$sess_id = $_SESSION['user']['id'];

关系表:

id      u1_fk    u2_fk     u_action     status
-------------------------------------------------
 1       1        2            2          5
-------------------------------------------------
 1       3        1            3          5

细节:

> ID是自动递增ID
> u1_fk是参与的第一个用户ID(已提交朋友请求)
> u2_fk是另一个用户的ID(得到好友请求的用户)
> u_action是最后一个执行操作的用户(例如,发送了好友请求,拒绝/接受了好友请求,阻止了其他用户等)

用户表:

user_id    user_username          user_picture
-------------------------------------------------
 1           someusername           me.jpg       
-------------------------------------------------
 2           anotherusername      another.jpg
-------------------------------------------------
 3           thirdusername         third.jpg

sql PHP(在此我对user_id进行INNER JOIN u_action):

$sql = "SELECT t1.id as id, "
        . " t1.u1_fk as u1, "
        . " t1.u2_fk as u2, "
        . " t2.user_id as userid, "
        . " t2.user_username as username, "
        . " t2.user_picture as picture "
        . " FROM relationships t1 "
        . " INNER JOIN users t2 "
        . " ON t1.u_action = t2.user_id "
        . " WHERE (t1.u1_fk = :user_one "
        . " OR t1.u2_fk = :user_two) "
        . " AND t1.relationship_status = 5 ";

$stmt = $dbCon->prepare($sql);
$stmt->bindParam(":user_one", $sess_id);
$stmt->bindParam(":user_two", $sess_id);
$stmt->execute();
$count = $stmt->rowCount();
if ($count > 0) {
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
}

我以为可以使用u_action,但这显然仅对其中之一有效,因为它是该字段中存储的2个用户ID之一.

所以我怎么知道每当我的查询应该内部连接u1或u2时,我有点困惑,我希望有人可以帮帮我,我正在虑执行2个查询并对所有结果进行排序,并删除用户自己的id并执行在第二个查询中的in子句中,但是我想知道是否可以仅通过1个查询来完成.

数据库的结果应该是什么样子.

在这个特定示例中,从sess_id为1的数据库中得到的结果是我想要的:

id      u1_fk    u2_fk      userid     username         picture
------------------------------------------------------------------
 1       1        2            2     anotherusername   another.jpg
------------------------------------------------------------------
 1       3        1            3      thirdusername     third.jpg

在这个特定示例中,从sess_id = 2的数据库中得到的结果是我想要的

id      u1_fk    u2_fk      userid     username         picture
------------------------------------------------------------------
 1       1        2            2     someusername   me.jpg
------------------------------------------------------------------

解决方法:

以下查询可以解决问题:

SELECT
    r.id as id,
    r.u1_fk as u1,
    r.u2_fk as u2,
    u2.user_id as userid,
    u2.user_username as username,
    u2.user_picture as picture
FROM 
    users u1
    INNER JOIN relationship r 
        ON  r.status = 5
        AND (r.u1_fk = u1.user_id OR r.u2_fk = u1.user_id)
    INNER JOIN users u2
        ON  u2.user_id <> u1.user_id
        AND (r.u1_fk = u2.user_id OR r.u2_fk = u2.user_id) 
WHERE 
    u1.user_id = :sessid

u1代表当前会话ID的用户记录,而u2作为关系另一端的用户加入.

带有示例数据的@L_801_35@返回了会话ID 1:

| id  | u1  | u2  | userid | username        | picture     |
| --- | --- | --- | ------ | --------------- | ----------- |
| 1   | 1   | 2   | 2      | anotherusername | another.jpg |
| 1   | 3   | 1   | 3      | thirdusername   | third.jpg   |

大佬总结

以上是大佬教程为你收集整理的php-如何从表中的2个值(其中1个是正确的)内联接正确的值全部内容,希望文章能够帮你解决php-如何从表中的2个值(其中1个是正确的)内联接正确的值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: