Php 其中sessionId=session,如果不匹配,则为this。MYSQL

Php 其中sessionId=session,如果不匹配,则为this。MYSQL,php,mysql,sql,Php,Mysql,Sql,我为这个糟糕的标题感到抱歉 我正在尝试创建一个脚本,记录每个会话用户在我的网站上的视图 但是我想记录不使用cookie的一次而不是多次的机器人,因为它们将有不同的会话id 我现在的代码是 $getRecords = $this->dbCon->prepare("SELECT id FROM vis_records WHERE `time` >= :timeFrom AND sessionId = :sessionId OR ip = :ip"); $getRecords -&g

我为这个糟糕的标题感到抱歉

我正在尝试创建一个脚本,记录每个会话用户在我的网站上的视图

但是我想记录不使用cookie的一次而不是多次的机器人,因为它们将有不同的会话id

我现在的代码是

$getRecords = $this->dbCon->prepare("SELECT id FROM vis_records WHERE `time` >= :timeFrom AND sessionId = :sessionId OR ip = :ip");
$getRecords -> bindValue(':timeFrom',time()-(60*30)); // Only Search Records from the last 30 min
$getRecords -> bindValue(':sessionId',self::getSessionId());
$getRecords -> bindValue(':ip',self::getCurIp());
但代码的问题是

如果mysql找到匹配的sessionId或ip,它将给我一个匹配的行

我想做的是 如果mysql找到一个匹配的sessionid,然后返回该行。如果mysql找不到匹配的sessionid,那么请尝试查找匹配的ip


直接在mysql查询中可以这样做吗?

如果我理解的话,您只需要将“and”条件与括号结合起来,如下所示:

"SELECT id FROM vis_records WHERE (`time` >= :timeFrom AND sessionId = :sessionId) OR ip = :ip"

很酷,谢谢,我刚读到关于工会的文章,我想我需要什么,让我来测试一下,如果是的话。我会将您的awnser标记为已接受。谢谢事实上,我甚至不能运行sql:S我得到了以下消息1064-你的sql语法有错误;检查与您的MySQL服务器版本对应的手册,了解在第6行“WHERE NOT EXISTS SELECT id FROM vis_records WHERE time`>=1391702868 AND se”附近使用的正确语法“知道吗?
SELECT id FROM vis_records WHERE `time` >= :timeFrom AND 
sessionId = :sessionId 
UNION ALL
SELECT id FROM vis_records WHERE `time` >= :timeFrom AND 
ip = :ip AND
NOT EXISTS
 (SELECT id FROM vis_records WHERE `time` >= :timeFrom AND 
sessionId = :sessionId)