我正在尝试查询具有类似值的数据库表
id = 1
tablename = 1 (bigint)
timestampstart = 2011-08-06 13:54:17 (timestamp)
timestampend = 2011-08-06 14:54:17 (timestamp)
所以我正在使用此函数尝试返回我提供的时间戳位于开始和结束时间戳之间的数据库名称
function getDatabase($timestamp){
$link = new MySQLi($host, $root, $password, $database);
$name = '';
$result = $link->query("SELECT `tablename` FROM `datas` WHERE `timestampstart` =< '$timestamp' AND `timestampend` >= '$timestamp'");
if($link->error){
return $link->error;
}
if($result->num_rows > 0){
while($row = $result->fetch_assoc()){
$name .= $row['tablename'];
}
return $name;
}else{
return 'no table';
}
}
所以我称之为
echo getDatabase('2011-08-06 13:54:50');
我得到的只是'没有桌子' 在我定义表格结构的顶部只有一行,非常感谢您的帮助。感谢您的时间。
答案 0 :(得分:1)
在UNIX_TIMESTAMP()
查询中使用SELECT
函数来比较时间戳。您的查询应该是这样的:
SELECT `tablename`
FROM `datas`
WHERE UNIX_TIMESTAMP(timestampstart) <= UNIX_TIMESTAMP('$timestamp')
AND UNIX_TIMESTAMP(timestampend) >= UNIX_TIMESTAMP('$timestamp')
或者,(较短的查询)
SELECT `tablename`
FROM `datas`
WHERE UNIX_TIMESTAMP('$timestamp') BETWEEN UNIX_TIMESTAMP(timestampstart) AND UNIX_TIMESTAMP(timestampend)
除此之外,我还可以看到范围问题,因为$host
,$root
,$password
和$database
在您的函数范围内不可用。使用global
或将数据库凭据作为函数参数传递给getDatabase()
函数。