GPT:
从提供的 PHP 代码中,我们可以看出它是在使用一个自定义的 QueryBuilder 类来动态构建一个 SQL 查询。这个查询涉及到三个表:User, UserSource, 和 UserTanPoint 。它还涉及到一个可能的条件筛选和一个子查询用于处理标签 ID 。请注意,由于没有完整的上下文和数据库的具体结构,以下的 SQL 语句是基于假设和代码片段中的信息推断出来的。
原生的 SQL 查询可能看起来像这样:
```sql
SELECT
u.*,
us.name AS user_source_name,
utp.point
FROM
users u
INNER JOIN user_sources us ON u.user_source_id =
us.id INNER JOIN user_tan_points utp ON
u.id = utp.user_id
WHERE
u.id = :id AND
u.cellphone = :cellphone AND
u.status = :status AND
us.title LIKE '%fuzzy%' AND
u.province_name = :province_name AND
u.city_name = :city_name AND
u.area_name = :area_name AND
u.created_at BETWEEN :created_at_start AND :created_at_end
```
如果 tag_id 参数不为空,则会添加一个 IN 子句:
```sql
AND
u.id IN (
SELECT DISTINCT user_id
FROM user_tags
WHERE tag_id = :tag_id
)
```
在上述 SQL 中,:id, :cellphone, :status, :province_name, :city_name, :area_name, :created_at_start, :created_at_end, 和 :tag_id 是参数占位符,您应该在实际的查询执行中用实际的值来替换它们。如果 user_source.title 字段使用了 LIKE '%fuzzy%',则表明它是模糊匹配,%fuzzy% 应替换为用户提供的实际搜索词。
由于 created_at 使用了 'range',这通常意味着搜索一个时间区间,这里使用了 BETWEEN 来表示。
请记住,由于缺少完整的信息,这个查询可能需要根据您的实际数据库架构和业务逻辑进行调整。特别是 JOIN 条件和 WHERE 子句可能需要更多的上下文来准确构建。