使用 SQL 从 VTiger 导出活动帐户 CSV

更新: 导出联系人而不是帐户的相关文章

虽然 VTiger 作为 CRM 工作得很好,但它的活动管理功能缺少最重要的功能之一:它不支持导出

本文旨在为技术导向的用户提供如何使用 SQL 查询执行该任务的指南。我们假设对 SQL 语法、MySQL 和 PHPMyAdmin 有基本了解。

我们示例的目标是导出帐户名称电子邮件表。对于电子邮件,将使用主要电子邮件,除非它为空,在这种情况下使用次要电子邮件。

查询的输入是活动名称(在我们的示例中,这将是 MyCampaign)。

查询活动编号

活动编号是一个字符串,例如 CAM4CAM9,存储在 vtiger_campaign 中。

vtiger_campaign_query.sql
SELECT campaign_no FROM vtiger_campaign WHERE `campaignname` = "MyCampaign"

查找活动记录 ID

在活动帐户关系 n 对 n 关系表中,活动编号不直接使用 - 而是使用活动记录 ID。我们需要从 vtiger_modtracker_detail 查询它,它包含有关活动的元数据键值数据(除其他外)。其中一个 K-V 对包含活动标识符(键 campaign_no),而另一个包含记录 ID(键 record_id)。

vtiger_modtracker_record_id.sql
SELECT postvalue FROM `vtiger_modtracker_detail` WHERE `id` = (SELECT `id` FROM `vtiger_modtracker_detail` WHERE postvalue = <<campaign number>> and fieldname = "campaign_no") AND fieldname = "record_id"

完整查询:

vtiger_modtracker_full_query.sql
SELECT postvalue FROM `vtiger_modtracker_detail` WHERE `id` = (SELECT `id` FROM `vtiger_modtracker_detail` WHERE postvalue = (SELECT campaign_no FROM vtiger_campaign WHERE `campaignname` = "MyCampaign") and fieldname = "campaign_no") AND fieldname = "record_id"

此查询的结果是数字活动记录 ID,例如 315

查询活动到帐户的关系

我们现在可以使用活动记录 ID 查询 n 对 n 表 vtiger_campaignaccountrel。还有其他类似的表用于潜在客户(vtiger_campaignleadrel)和联系人(vtiger_campaigncontrel)。

vtiger_campaign_account_rel.sql
SELECT accountid FROM vtiger_campaignaccountrel WHERE `campaignid` = <<campaign record ID>>

完整查询:

vtiger_campaign_account_full.sql
SELECT accountid FROM vtiger_campaignaccountrel WHERE `campaignid` = (SELECT postvalue FROM `vtiger_modtracker_detail` WHERE fieldname = "record_id" AND `id` = (SELECT `id` FROM `vtiger_modtracker_detail` WHERE postvalue = (SELECT campaign_no FROM vtiger_campaign WHERE `campaignname` = "MyCampaign") and fieldname = "campaign_no"))

此查询的结果是与活动相关的帐户 ID 列表。顺序通常与 VTiger 中显示的相同。

查询帐户信息

使用帐户 ID 列表,我们可以在 vtiger_accountJOIN 查询帐户详细信息。注意如果你在上一步中使用了替代关系表,你需要为潜在客户或联系人使用适当的表。

vtiger_account_info.sql
SELECT acc.accountname AS "Name", COALESCE(acc.email1, acc.email2) AS "EMail" FROM vtiger_campaignaccountrel AS car JOIN vtiger_account acc ON (acc.accountid = car.accountid) WHERE `campaignid` =(SELECT postvalue FROM `vtiger_modtracker_detail` WHERE fieldname = "record_id" AND `id` = (SELECT `id` FROM `vtiger_modtracker_detail` WHERE postvalue = (SELECT campaign_no FROM vtiger_campaign WHERE `campaignname` = "MyCampaign") and fieldname = "campaign_no")) AND (acc.email1 <> '' OR acc.email2 <> '')

注意除了 SELECT 列列表之外,还有一些特定于名称和电子邮件查询的方面:

  1. COALESCE(acc.email1, acc.email2) 如果 email1 为空则使用 email2
  2. AND (email1 <> '' OR email2 <> '') 忽略既没有设置 email1 也没有设置 email2 的帐户

如果你想要自定义列列表,你需要相应地修改它。

导出 CSV

在将查询输入到 PHPMyAdmin 等工具时,你可以点击Export按钮将结果导出为不同格式,包括 CSV 和 Excel。

虽然这可能不是最方便的选项,但它是一种非常灵活的生成和导出数据的方式。任何更方便的方式可能都不那么灵活。


Check out similar posts by category: Databases