Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 - Fatal编程技术网

Php 如何从重复行检查MYSQL连接中的一个特定结果

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

我试图使用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 ('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中获取一条记录,而不是多条记录。现在它显示了一条记录的重复行。太好了!谢谢你的魅力!我不知道为什么人们会否决我的问题?