2014-02-06 46 views
0

对不起的标题感到抱歉。WHERE sessionId = session或IF NOT MATCHING WHERE this is this。 MYSQL

即时通讯尝试创建一个脚本,可以记录用户在我的网站上查看每个会话。

,但我要记录的是不使用cookie的一次,而不是多时间机器人,因为它们将有一个diferent会话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查询?

回答

1
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) 
+0

很酷谢谢我刚刚读了关于工会,我认为我需要什么,让我测试一下,如果是这样。我把你的计算机标记为apcepted。谢谢! –

+0

实际上我甚至不能运行sql:S我得到以下消息'#1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在'WHERE NOT EXISTS'附近使用正确的语法(SELECT id FROM vis_records WHERE'time'> = 1391702868 AND se'at line 6' Any idea? –

+1

更新答案,纠正少量错误 –

0

如果我了解,你只需要夫妇“和”条件加上括号像这样:

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

不,不是exsactly。 :/谢谢任何方式:) –

+0

不是问题:) – dsimer