MySQL在选择之前排序
我有一个MySQL表,它将对象的出生和死亡事件存储为单独的行。我正在尝试编写一个查询,该查询将在给定时间获取所有“活动对象”。更重要的是,出生和死亡时间戳存储为字符串 系统具有历史特性,要求日期从0000-00-00:00开始,MySQL和UNIX都无法处理 我可以通过以下方法成功地对表进行排序:MySQL在选择之前排序,mysql,Mysql,我有一个MySQL表,它将对象的出生和死亡事件存储为单独的行。我正在尝试编写一个查询,该查询将在给定时间获取所有“活动对象”。更重要的是,出生和死亡时间戳存储为字符串 系统具有历史特性,要求日期从0000-00-00:00开始,MySQL和UNIX都无法处理 我可以通过以下方法成功地对表进行排序: ORDER BY CHAR_LENGTH(start_timestamp) ASC, start_timestamp ASC global $mysqli,$db_table_prefix; $st
ORDER BY CHAR_LENGTH(start_timestamp) ASC, start_timestamp ASC
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;
}
但是我正在寻找一个查询,当比较字符串时,它将合并这个顺序的规则
我目前的职能如下:
ORDER BY CHAR_LENGTH(start_timestamp) ASC, start_timestamp ASC
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;
}
遵循与此相同的规则:
ORDER BY CHAR_LENGTH(start_timestamp) ASC, start_timestamp ASC
查询时?您可以将它们归零,然后比较:
LPAD(start_timestamp,20,'0') > LPAD(another_timestamp,20,'0')
20个字符的限制是任意的,您应该根据需要进行更改
此外,在表中存储填充值可能会使您的生活更轻松。您可以将它们归零,然后比较:
LPAD(start_timestamp,20,'0') > LPAD(another_timestamp,20,'0')
20个字符的限制是任意的,您应该根据需要进行更改
另外,将填充值存储在表中可能会使您的工作更轻松。您可以将它们归零,然后比较-
LPAD(开始时间戳,20,'0')>LPAD(另一个时间戳,20,'0')
。20个字符的限制是任意的,您应该根据需要进行更改。另外,在表格中存储填充值可能会使您的生活更轻松。@Vatev-感谢您的回复,它起到了作用。你能把它作为一个正式的答复贴出来,这样我就可以接受了您可以将它们归零,然后比较-LPAD(开始时间戳,20,'0')>LPAD(另一个时间戳,20,'0')
。20个字符的限制是任意的,您应该根据需要进行更改。另外,在表格中存储填充值可能会使您的生活更轻松。@Vatev-感谢您的回复,它起到了作用。你能把它作为一个正式的答复贴出来,这样我就可以接受了