我正在编写医生搜索应用程序,用户可以在其他选项旁边搜索哪些医生可用。表格Doctors的列数很少,其中一列是 openshours (类型:文本),这里我将每个行的总开放时间存储在每个行中,如下所示:
Mo.
08:00-13:00
14:00-18:00
Tu.
14:00-20:00
We.
08:00-13:00
14:00-18:00
Th.
07:00-14:00
Fr.
08:00-13:00
14:00-18:00
Sa.
No
Su.
No
以这种方式在 openinghours 列中存储数据的一个优点是,这就是我将向用户显示数据的方式。在另一栏 doctoravailable (键入boolean:yes / no)中,我想显示医生现在是否可用。是否可以在MYSQL中编写一个函数,它会自动更新列开放时间列开放时间?我怎样才能实现它?还有其他更好的方法来实现这个目标吗?
我的计划: 我考虑创建一个视图,其中 doctoravailable 列将是 openshours 的函数。但我不确定这是否是正确的方法,或者是否有更好的方法。
答案 0 :(得分:2)
将开启时间存储为单个文本列并不是一个好主意,因为它会在您的查询中需要字符串操作和类型转换来计算医生是否可用,并且&# 39; ll防止DBMS有效地索引开启和关闭时间。在开始和结束时间之间进行过滤的查询(例如,为了获得所有可用的医生)将比必要的慢。
相反,将打开和关闭时间存储为两个单独的TIME
列。然后,您的应用程序代码可以格式化该信息以显示给用户。
doctoravailable 的视图是一个好主意,它是免维护的。每分钟运行一次查询以更新每位医生的状态听起来都很麻烦。
答案 1 :(得分:1)
你可以尝试这样的事情。问题是你将如何更新表格。您可能有一个cron作业在指定的时间更新表。一种选择是在用户进行搜索时更新表。
/* create blob */
var createBlobUrl = function(fileData,mimeType) {
var blob;
// Create blob
try {
blob = new Blob([fileData], {type: mimeType});
} catch (e) { // Backwards-compatibility
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
blob = new BlobBuilder();
blob.append(fileData);
blob = blob.getBlob(mimeType);
}
return URL.createObjectURL(blob);
};
/* CSS: body, * { background:green; } */
var zip = window.atob('H4sIAAAAAAAA/0vKT6nUUdBSqFZISkzOTi/KL81LsUovSk3Ns1aoBQCLj6wTHQAAAA==');
function str2bytes (str) {
var bytes = new Uint8Array(str.length);
for (var i=0; i<str.length; i++) {
bytes[i] = str.charCodeAt(i);
}
return bytes;
}
var bloburl = createBlobUrl(str2bytes(zip),'text/css');
var link = document.createElement('link');
link.setAttribute('rel','stylesheet');
link.setAttribute('type','text/css');
link.setAttribute('href',bloburl);
document.head.appendChild(link);