WHERE sessionId = session OR IF NOT MATCHING这就是这个。 MYSQL

时间:2014-02-06 15:49:13

标签: php mysql sql

我很抱歉这个糟糕的头衔。

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

但是我想记录那些不使用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查询中使用吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

如果我理解,你只需要结合'和'条件和括号一样:

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