phpmysql-存储时间和时间的数据类型;使用mysql在1列中的状态?
Helo伙计们我有这个表格的样本数据 目前存储的最佳数据类型是什么?在时间列上,我需要能够存储像DQ、DNS和DNF这样的术语 注意:(DQ=不合格,DNS=未启动,DNF=未完成) 您可以像这样存储数据,依靠JSON将时间和状态存储在一列中 要从PHP数据数组中创建此数据(例如,如果您希望提取当前数据,将其转换为JSON格式,并更新现有数据集),您可以这样做phpmysql-存储时间和时间的数据类型;使用mysql在1列中的状态?,php,sql,phpmyadmin,Php,Sql,Phpmyadmin,Helo伙计们我有这个表格的样本数据 目前存储的最佳数据类型是什么?在时间列上,我需要能够存储像DQ、DNS和DNF这样的术语 注意:(DQ=不合格,DNS=未启动,DNF=未完成) 您可以像这样存储数据,依靠JSON将时间和状态存储在一列中 要从PHP数据数组中创建此数据(例如,如果您希望提取当前数据,将其转换为JSON格式,并更新现有数据集),您可以这样做 $array = array("Athlete 1"=>array("time"=>"9.41", "status"=>
$array = array("Athlete 1"=>array("time"=>"9.41", "status"=>"DQ"),"Athlete 2"=>array("time"=>"0.00", "status"=>"DNS"));
foreach($array as $athlete=>$data){
$json = json_encode($data); // encode their specific data
// insert json data string into athlete time/status cell
}
或者
然后您将从数据库中取出它,并使用PHP解析它
$data = json_decode($json, true);
$time = $data['time'];
$status = $data['status'];
我个人认为你应该把时间储存在一列,把状态储存在另一列。这样做更有意义。如果您不能做到这一点,那么将数据存储在JSON中将允许您的数据库执行您希望它执行的操作,并且可以被访问该数据的大量不同语言使用
也可以做
$time = 9.41;
$status = "DQ";
$data = "$time|$status";
这将成为一个字符串。。。“9.41 | DQ”
将其存储在数据库中,然后在取出时
$data = "9.41|DQ"; // (taken from database result)
list($time, $status) = explode("|", $data); // split time & status
// that's it, now you have time & status variables for that cell!
还有,这里有一些合理的专栏想法
您可以使用秒或毫秒。。。然后编码
DNS = nil
DFN = 0xFFFFFFFF
DQ = 0xFFFFFFFE
这样的话,DNF和DQ会一直排到最后
您只需要确保在显示时不会将这些高值转换为时间。所以我的理解是,您希望将它们从存储在单独的表中更改为一个表中的一列。使用VARCHAR。VARCHAR用于存储各种字符,而不仅仅是字母。不能以时间或浮点列数据类型存储字母,因此,如果必须将它们存储为一个表中的一列,则这些不是选项我会考虑有一个事件表,然后是一个事件结果表。每个事件结果记录都会有一个指向事件的链接,并且在事件结果中会有诸如车道号、时间、结果等列。对于您的时间列,它看起来像是以分钟为单位的?考虑把它存储在几秒钟内,然后你可以把它存储成一个浮标。@布雷登,我试图按照你的建议来设计。我真正担心的是存储时间的数据类型。如您所见,时间应该能够存储DNS、DQ和DMS,它应该是varchar,但如果参与者完成比赛,我也需要存储它,时间应该是存储时间记录。您反对将结果y数据放在单独的列中吗?为什么要将这两条信息都放在一列中?@Brayden在存储时,我将其拆分为两个表。但是对于查看或编辑操作,我需要像表格一样显示它OK,这样您同意时间和结果应该存储为两个单独的列?我将时间存储为秒作为浮点,然后您可以在模型级别格式化。在python中,我会执行类似于
str(datetime.timedelta(seconds=103.42))
No-sir的操作,我希望将它们保存在单独的表中,作为一个表中的一列进行查看。但我需要像dq、dns、dnf一样将时间和术语存储在同一列中,就像时间一样。我无法将dns存储到time列,因为数据类型为time。视图表的数据类型应为VARCHAR。我对创建视图表不太了解,但是如果视图表中的列必须包含字母和数字,那么我之前所说的仍然适用于视图表列。
$data = "9.41|DQ"; // (taken from database result)
list($time, $status) = explode("|", $data); // split time & status
// that's it, now you have time & status variables for that cell!
id (auto increment, integer, primary key),
tournament (varchar 255),
event (int 11),
event_name (varchar 255),
heat (int 11),
heat_desc (varchar 255-male/female/etc),
athlete_name (varchar 50),
time (varchar 15) ~ so float can't mess up decimal places,
status (varchar 5 - for dq/dns/dnf),
lane (int 11)
DNS = nil
DFN = 0xFFFFFFFF
DQ = 0xFFFFFFFE