Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 连接和不存在值存在问题_Php_Sql_Sql Server - Fatal编程技术网

Php 连接和不存在值存在问题

Php 连接和不存在值存在问题,php,sql,sql-server,Php,Sql,Sql Server,这是我的桌子 使用者 第二张桌子看起来像 纵断面图 Id sender receiver block 1 1 2 True 2 2 3 False 3 4 1 False 我面临的问题是,当我在users表中使用height和weight进行搜索,并使用profileview表进行阻止时,我无法获得正确的结果 如果第二个用户bbb搜索高度为1,重量为10,则应显示第三个用户详细

这是我的桌子

使用者

第二张桌子看起来像

纵断面图

Id  sender  receiver    block
1   1       2           True
2   2       3           False
3   4       1           False
我面临的问题是,当我在users表中使用height和weight进行搜索,并使用profileview表进行阻止时,我无法获得正确的结果


如果第二个用户bbb搜索高度为1,重量为10,则应显示第三个用户详细信息ccc。第一个用户也匹配,但第一个用户阻止了第二个用户。问题是当我在profileview表中使用连接值时,如果发送方和接收方存在。如果不存在,我们在连接中如何处理..

mysql或SQL Server MS?到目前为止你都试了些什么,你在问什么?这也是一个模糊的问题。请从用户a中选择a.*在a.id=b.sender和b.receiver='105'和b.block='False'或nota.id=b.sender和b.receiver='105'上连接配置文件b,其中a.height介于1和65之间我尝试过的这条sql。.现在这两个结果都出来了。.sqlserver MS..这里是一个很好的起点。
CREATE TABLE #Users
(
    Id          int,
    [Name]      varchar(255),
    Height      int,
    [Weight]    int
)

CREATE TABLE #ProfileView
(
    Id          int,
    Sender      int,
    Receiver    int,
    [Block]     varchar(5)
)

INSERT INTO #Users
    (Id, [Name], Height, [Weight])
VALUES
    (1, 'aaa', 1, 10),
    (2, 'bbb', 4, 104),
    (3, 'ccc', 1, 10),
    (4, 'ddd', 56, 150),
    (5, 'eee', 232, 180)

INSERT INTO #ProfileView
        (Id, Sender, Receiver, [Block])
VALUES  
    (1, 1, 2, 'True'),
    (2, 2, 3, 'False'),
    (3, 4, 1, 'False')

DECLARE
    @CallingUser int,   --User performing the search
    @Height int,        --Height searched for
    @Weight int         --Weight searched for

SET @CallingUser = 2
SET @Height = 1
SET @Weight = 10

SELECT
    *
FROM
    #Users
    LEFT OUTER JOIN #ProfileView
        ON #Users.Id = #ProfileView.Id
            AND #ProfileView.Receiver = @CallingUser
WHERE
    #Users.Id <> @CallingUser
    AND #Users.Height = @Height
    AND #Users.[Weight] = @Weight
    AND (#ProfileView.[Block] = 'False' OR #ProfileView.[Block] IS NULL)

DROP TABLE #Users
DROP TABLE #ProfileView
CREATE TABLE #Users
(
    Id          int,
    [Name]      varchar(255),
    Height      int,
    [Weight]    int
)

CREATE TABLE #ProfileView
(
    Id          int,
    Sender      int,
    Receiver    int,
    [Block]     varchar(5)
)

INSERT INTO #Users
    (Id, [Name], Height, [Weight])
VALUES
    (1, 'aaa', 1, 10),
    (2, 'bbb', 4, 104),
    (3, 'ccc', 1, 10),
    (4, 'ddd', 56, 150),
    (5, 'eee', 232, 180)

INSERT INTO #ProfileView
        (Id, Sender, Receiver, [Block])
VALUES  
    (1, 1, 2, 'True'),
    (2, 2, 3, 'False'),
    (3, 4, 1, 'False')

DECLARE
    @CallingUser int,   --User performing the search
    @Height int,        --Height searched for
    @Weight int         --Weight searched for

SET @CallingUser = 2
SET @Height = 1
SET @Weight = 10

SELECT
    *
FROM
    #Users
    LEFT OUTER JOIN #ProfileView
        ON #Users.Id = #ProfileView.Id
            AND #ProfileView.Receiver = @CallingUser
WHERE
    #Users.Id <> @CallingUser
    AND #Users.Height = @Height
    AND #Users.[Weight] = @Weight
    AND (#ProfileView.[Block] = 'False' OR #ProfileView.[Block] IS NULL)

DROP TABLE #Users
DROP TABLE #ProfileView