2016-10-02 69 views
1

我想查询有像这样在mysql中查询日期什么都不返回?

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

查看你的'SELECT'查询,'= <'应该是'<=' –

+0

我还在'没有表' – JRowan

+0

你的数据库中是否有数据表? – yafater

回答

1

利用您的SELECT查询中的UNIX_TIMESTAMP()函数来比较时间戳。您的查询应该是这样的:

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()函数。

+0

我用变量的全局关键字和它的工作,谢谢你我从来没有听说过,我仍然是新的php – JRowan

+0

@JRowan很高兴我能帮上忙。 *快乐编码! : - )* –