我有一个智能合约,其中包含有关患者的信息。
患者结构
struct patient {
uint256 recordid;
bytes32 name;
bytes32 regNo;
bytes32 address;
int contactno;
}
mapping(uint256=>patient ) patients;
现在,我想按姓名或联系电话搜索患者。 当前,我正在按recordid搜索记录,这是唯一的。
搜索功能
function getpatientbyrecordid(uint256 id) view public returns (bytes32 ,bytes32 , bytes32, int ) {
return (patients[id].name,
patients[id].regNo,
patients[id].address,
patients[id].contactno,);
}
我只能按姓名和联系方式搜索记录。
任何帮助将不胜感激。
答案 0 :(得分:0)
如果要按名称搜索,则可以存储此映射:
mapping(bytes32 => mapping (uint256 => uint256)) nameLookup;
第二个映射将递增的随机数映射到一个记录ID,您可以遍历此映射以查找具有相同名称的患者,直到键返回0。这意味着不再有该名称的患者。
最好的方法是只对区块链上的共享分类帐执行所需的操作。保留其他数据链。