gpt4 book ai didi

MySQL 在选择前排序

转载 作者:行者123 更新时间:2023-11-29 00:26:20 25 4
gpt4 key购买 nike

我有一个 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

查询时?

最佳答案

您可以对它们进行零填充,然后进行比较:

LPAD(start_timestamp,20,'0') > LPAD(another_timestamp,20,'0')

20 个字符的限制是任意的,您应该根据需要进行更改。

此外,在表中存储填充值可能会让您的生活更轻松。

关于MySQL 在选择前排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18737012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com