php - WHERE sessionId = session 或 IF NOT MATCHING WHERE this is this。数据库管理系统

标签 php mysql sql

很抱歉标题不好。

我正在尝试创建一个脚本来记录用户每次 session 在我的网站上的查看情况。

但我想记录不使用 cookie 一次而不是多次的机器人,因为它们将具有不同的 session 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 查询中吗?

最佳答案

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)

关于php - WHERE sessionId = session 或 IF NOT MATCHING WHERE this is this。数据库管理系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21607534/

相关文章:

javascript - 使用 php、ajax 和 javascript 循环仅执行最后一个数组元素

mysql - 如何使用 MySQL SELECT 创建具有多个值的虚拟列?

c# - 如何为每种产品存储多种尺寸

mysql - 如何将一个表中的信息插入到另一个表中

php - 如何更改 Symfony 上 "logger"服务的可见性?

php - Zend Form 复选框已选中

mysql - 查询以选择开始和停止时间

sql - 如何处理同一列中多种日期格式的 Snowflake to_date 转换问题?

mysql - 生成范围内的数字——SQL

php - 在 php 中更改检索日期的时区