Php 如何从重复行检查MYSQL连接中的一个特定结果
我试图使用id从另一个表的联接中检查特定记录,但另一个表有多个具有相同id的记录。我想选择列中没有所有人的记录 我的SQL是:Php 如何从重复行检查MYSQL连接中的一个特定结果,php,mysql,Php,Mysql,我试图使用id从另一个表的联接中检查特定记录,但另一个表有多个具有相同id的记录。我想选择列中没有所有人的记录 我的SQL是: SELECT b.* , a.* FROM engine4_blog_blogs b LEFT JOIN engine4_authorization_allow a ON a.resource_id = b.blog_id WHERE a.resource_type = 'blog' AND a.role NOT IN ('e
SELECT b.*
, a.*
FROM engine4_blog_blogs b
LEFT
JOIN engine4_authorization_allow a
ON a.resource_id = b.blog_id
WHERE a.resource_type = 'blog'
AND a.role NOT IN ('everyone')
AND a.action = 'view'
AND b.draft = 0
AND b.search = 1
ORDER
BY b.creation_date DESC
我只想选择记录没有所有人,只选择一行不重复
blog 2 view everyone 0 1 NULL
blog 2 view owner_member 0 1 NULL
blog 2 view owner_member_member 0 1 NULL
blog 2 view owner_network 0 1 NULL
blog 2 view registered 0 1 NULL
谢谢,如果要选择没有“everyone”的行,需要将第二个表中的所有条件移动到
on
子句中:
SELECT b.*, a.*
FROM engine4_blog_blogs b LEFT JOIN
engine4_authorization_allow a
ON a.resource_id = b.blog_id AND
a.resource_type = 'blog' AND
a.role IN ('everyone') AND
a.action = 'view'
WHERE b.draft = 0 AND b.search = 1 AND a.resource_id IS NULL
ORDER BY b.creation_date DESC ;
如果在WHERE
子句中放入条件,它会过滤掉所有不匹配的行,将左连接
转换为内部连接
尝试:
SELECT DISTINCT b.*, a.*
FROM engine4_blog_blogs b
LEFT
JOIN engine4_authorization_allow a
ON a.resource_id = b.blog_id
WHERE a.resource_type = 'blog'
AND a.action = 'view'
AND a.role NOT IN ('everyone')
AND b.draft = 0
AND b.search = 1
AND a.resource_id IS NULL
ORDER BY b.creation_date DESC
您可以使用distinct命令来避免重复记录
SELECT DISTINCT b.*
, a.*
FROM engine4_blog_blogs b
LEFT
JOIN engine4_authorization_allow a
ON a.resource_id = b.blog_id
WHERE a.resource_type = 'blog'
AND a.role NOT IN ('everyone')
AND a.action = 'view'
AND b.draft = 0
AND b.search = 1
ORDER
BY b.creation_date DESC
你知道呈现为内部连接,对吗?是的,但我只想从包含everyone的查询nit中获取一条记录,而不是多条记录。现在它显示了一条记录的重复行。太好了!谢谢你的魅力!我不知道为什么人们会否决我的问题?