Php 其中sessionId=session,如果不匹配,则为this。MYSQL
我为这个糟糕的标题感到抱歉 我正在尝试创建一个脚本,记录每个会话用户在我的网站上的视图 但是我想记录不使用cookie的一次而不是多次的机器人,因为它们将有不同的会话id 我现在的代码是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
$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)