首页 > 解决方案 > SQL 语句:与联系人相关的日历事件

问题描述

我正在开发一个 SQL 查询来让 HeidiSQL 显示日历条目和连接的联系人。

约会包含在 vtiger_activity 表中,联系人包含在 vtiger_contactdetails 表中。通过表“vtiger_crmentity”存在连接。

SELECT a.subject
     , a.activitytype
     , a.date_start
     , a.due_date
     , a.time_start
     , a.time_end
     , d.firstname
     , d.lastname
  FROM vtiger_activity a
  LEFT 
  JOIN vtiger_crmentity c
    ON c.crmid = a.activityid
  LEFT 
  JOIN vtiger_contactdetails d
    ON d.contactid = c.crmid
 WHERE a.due_date >= '2019-05-18' AND a.date_start <= '2019-05-23'

查询结果:它显示了时间段中的日期,但在应该显示联系人的列中只有 NULL 我需要它用于 Android 应用程序的查询。我期望名字和姓氏,因为数据存在。

有谁知道我的错误在哪里?

永远感谢你的帮助

Vtiger 7.1.0 和 HeidiSQL ER图

标签: mysqlsqlvtigerheidisql

解决方案


LEFT JOIN的 s 顺序错误。如果您想要名称,它们来自详细信息表,并且应该是FROM. 您还需要将条件移至ON.

像这样的东西:

SELECT d.firstname, d.lastname, a.subject, a.activitytype
       a.date_start, a.due_date, a.time_start, a.time_end
FROM vtiger_contactdetails d LEFT JOIN
     vtiger_crmentity c
     ON d.contactid = c.crmid LEFT JOIN
     vtiger_activity a
     ON c.crmid = a.activityid AND
        a.due_date >= '2019-05-18' AND
        a.date_start <= '2019-05-23';

推荐阅读