Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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 MySQL查询返回表中未签名的内容,该表不再工作_Php_Mysql_Join - Fatal编程技术网

Php MySQL查询返回表中未签名的内容,该表不再工作

Php MySQL查询返回表中未签名的内容,该表不再工作,php,mysql,join,Php,Mysql,Join,我有两个表wp\u策略和wp\u策略 wp_策略包含策略列表,wp_策略包含哪个用户签署了什么策略 我需要根据选择的用户和该用户未签名的内容显示 在多人签署策略(表明查询存在问题)之前,以下选项一直有效 谁能告诉我哪里出了问题 SELECT DISTINCT wp_policy.Policy_Name, wp_policies.PolicyID FROM wp_policy LEFT JOIN wp_policies ON wp_policy.Policy_ID = wp_policies.Po

我有两个表
wp\u策略
wp\u策略

wp_策略
包含策略列表,wp_策略包含哪个用户签署了什么策略

我需要根据选择的用户和该用户未签名的内容显示

在多人签署策略(表明查询存在问题)之前,以下选项一直有效

谁能告诉我哪里出了问题

SELECT DISTINCT wp_policy.Policy_Name, wp_policies.PolicyID
FROM wp_policy
LEFT JOIN wp_policies ON wp_policy.Policy_ID = wp_policies.PolicyID
WHERE wp_policies.Username =  'Jbyrne'
OR wp_policies.Username IS NULL 
AND wp_policy.Policy_ID IS NOT NULL 
ORDER BY wp_policy.Policy_Name ASC
示例:wp_策略:
策略名称| |策略ID
不利天气条件| |不利天气条件v1
银行假日政策| |银行假日政策v1
中断| |中断2
收款政策| |收款政策v1
公司汽车共享政策| |公司汽车共享政策v1
吸烟政策| |吸烟政策v2
检举政策| |检举政策v1

示例:wp_策略
保单名称| |用户名|保单ID
不利天气条件| Jbyrne |不利天气条件v1
检举政策| Jbyrne |检举政策v1
公司汽车共享政策| Barrowc |公司汽车共享政策v1
银行假日政策| Barrowc |银行假日政策v1

我需要看看“Jbyrne”没有签名的东西

其中应显示:

银行假日保单v1
Breaksv2
收藏政策v1
公司汽车股份保单v1
吸烟政策尝试以下方法:

SELECT DISTINCT wp_policy.Policy_Name, wp_policies.PolicyID
FROM wp_policy
right outer JOIN wp_policies ON wp_policy.Policy_ID = wp_policies.PolicyID
WHERE wp_policies.Username != 'byrnej'
AND wp_policy.Policy_ID IS NOT NULL 
ORDER BY wp_policy.Policy_Name ASC
试试这个:

SELECT wp_policy.Policy_ID
FROM wp_policy
LEFT OUTER JOIN wp_policies
ON wp_policy.Policy_ID = wp_policies.PolicyID 
WHERE wp_policies.Username = 'byrnej'
AND wp_policies.PolicyID != wp_policy.Policy_ID 
ORDER BY wp_policy.Policy_ID ASC

有效。

注意,右连接往往被认为不如左连接直观。正是因为这个原因,我认为,左派占主导地位

 CREATE TABLE policy(policy_name VARCHAR(50) NOT NULL UNIQUE,policy_id VARCHAR(50) NOT NULL PRIMARY KEY);

 INSERT INTO policy VALUES
 ('Adverse Weather Conditions','Adverse_Weather_Conditionsv1'),
 ('Bank Holiday Policy','Bank_Holiday_Policyv1'),
 ('Breaks','Breaksv2'),
 ('Collections Policy','Collections_Policyv1'),
 ('Company Car Share Policy','Company_Car_Share_Policyv1'),
 ('Smoking Policy','Smoking_Policyv2'),
 ('Whistleblowing Policy','Whistleblowing_Policyv1');

 CREATE TABLE user_policy(username VARCHAR(50) NOT NULL,policy_id VARCHAR(50) NOT NULL,PRIMARY KEY(username,policy_id));

 INSERT INTO user_policy VALUES
 ('Jbyrne','Adverse_Weather_Conditionsv1'),
 ('Jbyrne','Whistleblowing_Policyv1'),
 ('Barrowc','Company_Car_Share_Policyv1'),
 ('Barrowc','Bank_Holiday_Policyv1');

 SELECT p.*
   FROM policy p
   LEFT
   JOIN user_policy up
     ON up.policy_id = p.policy_id
    AND up.username = 'Jbyrne'
  WHERE up.username IS NULL;

 +--------------------------+----------------------------+
 | policy_name              | policy_id                  |
 +--------------------------+----------------------------+
 | Bank Holiday Policy      | Bank_Holiday_Policyv1      |
 | Breaks                   | Breaksv2                   |
 | Collections Policy       | Collections_Policyv1       |
 | Company Car Share Policy | Company_Car_Share_Policyv1 |
 | Smoking Policy           | Smoking_Policyv2           |
 +--------------------------+----------------------------+

如果尝试此查询:

SELECT DISTINCT wp_policy.Policy_Name, wp_policy.Policy_ID, wp_policies.Username
FROM wp_policy
LEFT JOIN wp_policies ON 
wp_policy.Policy_ID=wp_policies.PolicyID AND wp_policies.Username='Jbyrne'
WHERE 1
ORDER BY wp_policy.Policy_Name ASC
它将显示已为指定用户选择或未选择的策略。 因此,在那之后,您需要像那样修改查询,它将只显示我们感兴趣的行

SELECT DISTINCT wp_policy.Policy_Name, wp_policy.Policy_ID
FROM wp_policy
LEFT JOIN wp_policies ON 
wp_policy.Policy_ID=wp_policies.PolicyID AND wp_policies.Username='Jbyrne'
WHERE wp_policies.PolicyID IS NULL 
ORDER BY wp_policy.Policy_Name ASC
诀窍是在“ON”条件中指定“wp_policies.Username='Jbyrne'”,然后在“WHERE”条件中指定wp_policies.PolicyID为NULL


您的第一个查询是错误的,因为您指定了几个不正确的条件。(对不起,我的英语…

@jbyrne2007 Change Answer0结果,我仍然需要传递用户名。此sql从php页面上删除,其作用类似于报告,有一个下拉列表通过用户名。你能添加一个例子和期望的结果吗?当然,请耐心等待。你需要所有用户名和他采取的策略。。。。如果没有人采取任何政策,您需要查询此案例请参阅上面的修订内容您应该坚持我的编辑。它更容易理解,并且有一个合适的标题。谢谢你的帮助。
SELECT DISTINCT wp_policy.Policy_Name, wp_policy.Policy_ID
FROM wp_policy
LEFT JOIN wp_policies ON 
wp_policy.Policy_ID=wp_policies.PolicyID AND wp_policies.Username='Jbyrne'
WHERE wp_policies.PolicyID IS NULL 
ORDER BY wp_policy.Policy_Name ASC