我有一个 MySQL 表,将对象的出生和死亡事件存储为单独的行。我正在尝试编写一个查询,该查询将在给定时间获取所有“活体”。更重要的是出生和死亡时间戳存储为字符串。
该系统具有历史特征,要求日期从 0000-00-00 00:00 开始,这是 MySQL 或 UNIX 都无法处理的。
我可以使用以下方法成功对表格进行排序:
ORDER BY CHAR_LENGTH(start_timestamp) ASC, start_timestamp ASC
但我正在寻找一个在比较字符串时包含此 ORDER BY 规则的查询。
我目前的功能如下:
global $mysqli,$db_table_prefix;
$stmt = $mysqli->prepare("SELECT object_id FROM ".$db_table_prefix."user_events WHERE start_timestamp < ? AND event_id = ?");
$stmt->bind_param("ii",$time,$birth);
$stmt->execute();
$stmt->bind_result($object_id);
while ($stmt->fetch()){
$row[] = $object_id;
}
$stmt->close();
if(!empty($row)){
$stmt = $mysqli->prepare("SELECT object_id FROM ".$db_table_prefix."user_events WHERE start_timestamp > ? AND event_id = ? AND object_id IN (".join(",",$row).")");
$stmt->bind_param("ii",$time,$death);
$stmt->execute();
$stmt->bind_result($object_id);
while ($stmt->fetch()){
$row2[] = array("object_id" => $object_id);
}
$stmt->close();
if(!empty($row2)){
return $row2;
}else{
return FALSE;
}
这里的问题是 MySQL 没有按照我想要的方式比较字符串。所以一串“1000000000”(10)小于“900000000”(9)。
有没有办法做到这一点:
WHERE start_timestamp > ?
遵循与此相同的规则:
ORDER BY CHAR_LENGTH(start_timestamp) ASC, start_timestamp ASC
查询时?