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

2024-11-05 74 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 中的格式匹配。

    相关文章

    莱卡云:12月香港云服务器、美国云服务器、日本云服务器促销活动
    php8中,empty($param[‘time_num’]) 如果这个 time_num 为0 他是真还是假?
    php中使用 Symfony DomCrawler 来获取 HTML 内容中的 token 值
    PHP请求库Guzzle配置代理
    越速云:简单好用的稳定高性价比的云服务器云手机服务商
    php中检查文本内容中是否包某个字符或者名字

    发布评论