thinkphp8中,数据库的字段是 api_node_id ,值是:多个用英文逗号区分,这种应如何来查询准确的数据取出唯一的主键ID?

2024-11-05 51 0

如果你的数据库字段 api_node_id 值是以逗号分隔的多个云系统节点ID(例如 "node_id_1,node_id_2,node_id_3"),而你需要根据单个 node_id 查找,可以使用 SQL 的 FIND_IN_SET 函数来执行该查询。

以下是更新后的代码示例:

/**
 * 根据云实例的节点ID获取云服务器在本地的节点数据
 * @param $data
 * @return mixed
 */
private function getNodeId($data)
{
    return CloudNodeModel::whereRaw("FIND_IN_SET(?, api_node_id)", [$data['node_id']])->value('id');
}

说明:

  1. whereRaw 方法: 这个方法允许你直接写 SQL 查询,可以为特定的 SQL 函数提供更大的灵活性。在这里我们使用 FIND_IN_SET 来检查 api_node_id 中是否包含指定的 node_id
  2. 参数绑定? 是一个占位符,实际查询时会用 [$data['node_id']] 进行绑定,防止 SQL 注入。

注意事项:

  • 这种方法在性能上可能不如正常的索引查询,特别是当 api_node_id 的值很大或者有很多条记录时。因此,建议在设计数据库架构时,尽量使用正规的表结构,以避免这样的字符串存储。
  • 确保 node_id 的值格式正确,即在查询时与 api_node_id 中的格式匹配。

    相关文章

    PHP常用时间日期处理总结
    使用PHP获取文件夹中所有文件
    tp(thinkphp6)记录后台操作日志
    ThinkPHP6实现上传图片带水印方法
    ThinkPHP6实现简单的记录网站后台管理操作日志方法
    PHP远程代码执行漏洞(CVE-2024-4577)解决方案(不升级PHP版本)

    发布评论