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