Php mySQL:UPDATE命令中的Sub SELECT语句

Php mySQL:UPDATE命令中的Sub SELECT语句,php,mysql,select,sql-update,subquery,Php,Mysql,Select,Sql Update,Subquery,我正在更新访问者中的一个专栏。我还在更新查询的SET部分使用sub-select语句 UPDATE visitors AS v SET v.IsFirstVisit = (SELECT COUNT(*) FROM visitors AS v2 WHERE ..... LIMIT 1) 但是,mySQL返回此错误消息 #1093 - You can't specify target table 'v' for update in FROM clause 我不知道为什么不能访问内

我正在更新访问者中的一个专栏。我还在更新查询的SET部分使用sub-select语句

UPDATE
    visitors AS v
SET
    v.IsFirstVisit = (SELECT COUNT(*) FROM visitors AS v2 WHERE ..... LIMIT 1)
但是,mySQL返回此错误消息

#1093 - You can't specify target table 'v' for update in FROM clause
我不知道为什么不能访问内部select语句中的“v”对象。我也不想使用多个语句,因为这会导致性能问题

问题:如何在内部select中使用“v”对象

更新: 这是整个查询

UPDATE
    visitors AS v
SET
    IsFirstVisit = (SELECT Count(*) FROM visitors AS v2 WHERE v2.VisitorId < v.VisitorId AND v2.IP = v.IP AND v2.DateTime > v.DateTime [TODO:SUBTRACT30MINUTES] LIMIT 1)
WHERE
    VisitorId = "991"

我猜你在找这个

 UPDATE
    visitors 
 SET
    IsFirstVisit = (SELECT COUNT(*) FROM visitors  WHERE ..... LIMIT 1)
编辑:

试试这个

    UPDATE
       visitors
    SET
         IsFirstVisit = (SELECT Count(*) FROM visitors v2 inner join visitors v 
         ON v.VisitorId = v2.VisitorId WHERE v2.IP = v.IP AND v2.DateTime > v.DateTime AND v2.VisitorId < v.VisitorId [TODO:SUBTRACT30MINUTES] LIMIT 1)
    WHERE
    VisitorId = "991"
UPDATE语句中的内部联接不是一个坏主意

UPDATE
    visitors inner join (SELECT COUNT(*) as test FROM visitors v) as v
 SET
    isfistvisit = v.test;
另一个我不太喜欢的解决方法

update visitors
   set isfistvisit = (
      select count(*) from (
         select count(*) from visitors
      ) as x
      )

这将不起作用,因为我必须访问。。。。我在问题中添加了整个查询。在新的解决方案中,内部select语句与外部select语句不交互,但我认为我可以从PHP中插入VisitorId。那就行了。非常感谢。