gpt4 book ai didi

php - MySql 数据类型与 PHP 格式化同时不丢失数字排序功能

转载 作者:行者123 更新时间:2023-11-29 02:56:35 25 4
gpt4 key购买 nike

参见 http://pdga-europe.com/standings-2015/

这可能是您最近看到的最简单的问题,但我被难住了。

我正在将 XLS 表导入 MySql 数据库,大部分数据是整数,但有些(实际上,只有一些)是分数(精确到 .5)

PHPMyAdmin 将数据类型设置为 DECIMAL (4,1),并且所有数学运算都是正确的(我正在对所有数据进行降序排序(对于总计为“0”的数据,我使用的是不可见列“合计”排序依据)。

我想看到的是:

该特定列 (ET3) 中的所有整数都显示为整数(而不是 xxx.0),只有其他的显示为 yyy.5?

VARCHAR 至少会正确显示它,但它显然会阻止我以字母顺序以外的任何方式对数据进行排序(其中 9 突然出现在 88 之前)。

我应该走什么路才能做到这一点?

我应该找到正确的数据类型,还是应该用 PHP 进行格式化?

目前我的数据是这样生成的:

<..query bla bla ..>
printf("
<tr>
<td>%s</td>
</tr>\n",
$row["ET3"]);
}

谢谢。

最佳答案

您不应该修改存储这些值的数据类型,因为您真正处理的只是显示逻辑问题。在内部,只要它们中的一些有小数部分,所有都应该存储为数字类型的小数部分,而不是作为 VARCHAR 类型。

所以您应该在 PHP 中处理显示逻辑,并且可以通过多种不同的方式来完成。从 MySQL 检索值时,您将在 $row['ET3'] 中得到一个字符串而不是 PHP 浮点值,这使得使用基本字符串操作很容易处理 like substr() .您可以测试最后两个字符是否为 ".0"truncate it with intval() .例如:

// Intval truncates the .0
echo intval('9.0');
// 9

使用三元组在一行中执行切换:

echo substr($row["ET3"], -2) == ".0" ? intval($row["ET3"]) : $row["ET3"];

填充到您现有的 printf() 中的表达式作为:

printf("
<tr>
<td>%s</td>
</tr>\n",
(substr($row["ET3"], -2) == ".0" ? intval($row["ET3"]) : $row["ET3"]));

虽然上面的三元组在您现有的 printf() 上下文中更紧凑,但可以像这样以扩展形式表示。

if (substr($row["ET3"], -2) == ".0") {
// Truncate to an integer
// intval($row["ET3"])
}
else {
// Return the full original value (N.5)
// $row["ET3"];
}

最后,如果您想在多个地方使用它,请考虑将其包装在一个函数中:

function truncInt($value) {
return substr($value, -2) == ".0" ? intval($value) : $value;
}

然后只需在原始 printf() 中使用 truncInt($row["ET3"])...

关于php - MySql 数据类型与 PHP 格式化同时不丢失数字排序功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30168643/

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