有没有办法检查lead_id是否在表中多次出现,如果是,则从查询中排除?原因是我只想在 status_id = 1 并且没有找到该 Lead_id 的其他 status_id/行时添加新行。
数据库的设计方式是,每次状态更新都会创建一个新行。因此,旧行具有较旧的时间戳并保留在数据库表中,这些将显示在前端的状态历史记录组件中。但既然是这样设计的,我就不能简单地说:给每个用户一个状态1,一个新的状态更新。因为这样它将为每个 Lead_id 添加一行,因为所有潜在客户都将以 status_id 1 进入数据库。
到目前为止我使用的查询:
INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`) SELECT (`lead_id`, 13, "", `created_at`, `updated_at`) WHERE `lead__status_id` = 1 AND
数据是什么样的:
lead_id | status_id | 更多数据 |
---|---|---|
1 | 1 | 数据 |
1 | 12 | 数据 |
2 | 1 | 数据 |
2 | 14 | 数据 |
3 | 1 | 数据 |
4 | 1 | 数据 |
5 | 1 | 数据 |
6 | 1 | 数据 |
对于每个新的潜在客户(表单提交),它将创建一行并为该潜在客户提供 status_id 1(状态:新)。我确实需要将 200 多个线索从 1 批量更新到另一个 status_id,但是通过我现在的查询,它将更新包含 status_id 为 1 的每一行。我想要的是,它将首先检查 Lead_id 是否仅存在在表中一次,如果为 true,则添加具有更新的 status_id 的新行。
因此,在 sql 查询之后,它需要如下所示:
lead_id | status_id | 更多数据 |
---|---|---|
1 | 1 | 数据 |
1 | 12 | 数据 |
2 | 1 | 数据 |
2 | 14 | 数据 |
3 | 1 | 数据 |
3 | 12 | 数据 |
4 | 1 | 数据 |
4 | 12 | 数据 |
5 | 1 | 数据 |
5 | 12 | 数据 |
6 | 1 | 数据 |
6 | 12 | 数据 |
TLDR:如果 Lead_id 在表中仅找到一次,则添加带有 status_id 的新行。
P粉4410764052024-04-01 09:38:34
如果您的表每行都有一个唯一的 ID,那么您可以使用这样的查询
INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`) SELECT (`lead_id`, 13, "", `created_at`, `updated_at`) FROM `lead_has_status` l WHERE `lead__status_id` = 1 AND NOT EXISTS ( SELECT 1 FROM lead_has_status WHERE `lead_id` = l.`lead_id` AND id <> l.id );
并且没有 ID
INSERT INTO `lead_has_status` (`lead_id`, `lead__status_id`, `comment`, `created_at`, `updated_at`) SELECT (`lead_id`, 13, "", `created_at`, `updated_at`) FROM `lead_has_status` l WHERE `lead__status_id` = 1 AND () SELECT COUNT(*) FROM lead_has_status WHERE `lead_id` = l.`lead_id`) = 1 ;