【问题标题】:Joining three mysql tables/two select statements连接三个mysql表/两个select语句
【发布时间】:2012-10-09 10:52:11
【问题描述】:

我有以下表格:

http://www.gulllakeschools.net/mysqltables.pdf

我需要以这种格式提取数据: 学生姓氏、学生名字、日期事件、日期事件(学生登录的每一天都会有一个日期事件)

组件 com_users 是我需要从组件列中提取的组件。

我是主要的 mysql 菜鸟,无法弄清楚如何一次完成所有操作。我有这些单独工作的选择语句:

SELECT civicrm_contact.last_name, civicrm_contact.first_name, civicrm_uf_match.uf_id
FROM civicrm_contact, civicrm_uf_match
WHERE civicrm_contact.id = civicrm_uf_match.contact_id

SELECT user_id, component, group_concat( date_event )
FROM jos_content_statistics
WHERE component = "com_users"
GROUP BY user_id

但我一辈子都无法让他们加入。我试过加入、加入、完全加入、联合,都产生错误。我在 where 语句之前和之后都尝试过加入。联合产生整理错误。我没有尝试过内部连接,因为我无法弄清楚。

【问题讨论】:

  • 请告诉我们你用JOINs 尝试过什么
  • 你想怎么加入?表之间的关系是什么,输入数据是什么,你想要什么作为输出?

标签: mysql


【解决方案1】:
SELECT C.last_name, C.first_name, S.date_event
FROM civicrm_contact as C
INNER JOIN civicrm_uf_match as M on M.contact_id = C.id 
INNER JOIN jos_content_statistics as S on M.uf_id = S.user_id

【讨论】:

  • 我不知道他为什么需要那个,因为要求不是那么清楚。这个查询可能会加入这些表,并让他知道他将如何根据要求加入这三个表
【解决方案2】:
SELECT 
  civicrm_contact.last_name, 
  civicrm_contact.first_name, 
  civicrm_uf_match.uf_id,
  (select group_concat(jos_content_statistics.date_event) 
   from jos_content_statistics 
   where user_id = civicrm_uf_match.uf_id 
     and civicrm_uf_match.contact_id = civicrm_contact.id 
     and component = "com_users" 
   GROUP BY user_id) as date_events
FROM civicrm_contact join civicrm_uf_match
on civicrm_contact.id = civicrm_uf_match.contact_id
where civicrm_contact.contact_sub_type='student' 

【讨论】:

  • 这个很好用。现在唯一需要做的就是将结果限制在学生身上。我需要一个 where 语句,例如 where civicrm_contact.contact_sub_type='student' 但不确定如何将其添加到上面。
  • 完美!非常感谢!你一直是理智的保护者。
【解决方案3】:

试试这个:

SELECT cc.last_name, cc.first_name, cm.uf_id, jc.component, jc.dateevent 
FROM civicrm_contact cc
INNER JOIN civicrm_uf_match cm ON cc.civicrm_contact.id = cm.contact_id
INNER JOIN
(
    SELECT user_id, component, group_concat( date_event ) dateevent
    FROM jos_content_statistics
    WHERE component = "com_users"
    GROUP BY user_id, component
) jc ON cm.uf_id = jc.user_id

【讨论】:

  • cc中没有用户id (cc.user_id = jc.user_id)
  • @AnandPhadke - 谢谢,我希望civicrm_uf_match cm 中有一个,这样我们就可以加入ON cm.user_id = jc.user_id。问题是OP没有说如何加入这两个查询,这些都是猜测。
  • @AnandPhadke 你怎么知道??
  • 检查附有问题的pdf文件,查看数据
  • @AnandPhadke 啊哈,我忘了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2017-04-30
  • 1970-01-01
相关资源
最近更新 更多