【问题标题】:SELECT from multiple Tables and String从多个表和字符串中选择
【发布时间】:2013-06-10 23:56:48
【问题描述】:

我正在尝试获取查询的“总结果”,但有点难以理解它并且不断遇到错误。这是我的餐桌设置:

exp_channel_data table
entry_id   field_id_17
36         1
43         6
42         5
65         7

exp_freeform_form_entries_2 table
form_field_8    user_id
40              6
35              1
38              1


exp_matrix_data table
entry_id   col_id_20
36         [35] [test-course] Test Course
36         [38] [test-course-2] Test Course 2
43         [40] [health-safety] Health & Safety
43         [35] [test-course] Test Course
43         [38] [test-course-2] Test Course 2
65         [40] [health-safety] Health & Safety

我需要做一个查询来检查exp_matrix_data 内的“课程”(col_id_20) 是否作为exp_free_form_entries_2 内的“已完成课程”(form_field_8) 存在(与[] 之间的数字链接)。然后我需要输出“未完成课程”的“计数”

由于多个“会员”可以参加课程,我需要从登录用户那里查看“课程”。

每个用户作为两个不同的 ID 存储在 exp_channel_data 中 - “用户资料 ID”(entry_id),其中“课程”分配给用户,还有一个“唯一会员 ID”(field_id_17)。

我将动态输入的“用户配置文件 ID”,我通常会这样做:

WHERE entry_id = '{logged_in_id}'

因此,如果我要运行查询以查看“唯一会员 ID”(field_id_17) 的“用户配置文件 ID”为 43 的值 6 是否有任何已完成的“未完成课程”,这将导致2“未完成的课程”,因为只有 1 课程已完成:

43 [40] [health-safety] Health & Safety

关系

entry_id [exp_channel_data] => entry_id [exp_matrix_data]

field_id_17 [exp_matrix_data] => user_id [exp_freeform_form_entries_2]

col_id_20 [exp_matrix_data] => form_field_8 [exp_freeform_form_entries_2]

【问题讨论】:

    标签: mysql arrays string count expressionengine


    【解决方案1】:

    根据您提供的规格,我希望此查询能让您更接近您想要的:

    select d.* 
    from exp_channel_data ch 
    inner join exp_freeform_form_entries_2 ff 
      on ch.field_id_17 = ff.user_id
    inner join exp_matrix_data d 
      on d.col_id_20 like Concat('[', ff.form_field_8, ']%')
    where ch.entry_id = 36
    

    查看sqlfiddle

    【讨论】:

    • 我稍微修改了这个问题,因为我意识到 'exp_freeform_form_entries_2' 中的行也需要限制为 ID 号
    • 抱歉,这令人困惑,但这是通过设置这些列名称的 CMS 运行的。我需要确认 exp_matrix_data 中的 entry_id 但现在 entry_id 必须与 field_id_17 col 相关,这也是 user_id
    • 您必须指出哪些表/列相互关联,以及您如何判断结果只有两行...
    • 我已经用更好的描述以及列和表之间的关系更新了问题
    【解决方案2】:

    这行得通。

    select count(*) from exp_matrix_data where entry_id = '{logged_in_id}' and
     CONVERT(SUBSTRING_INDEX(SUBSTRING(col_id_20, 2),']',1),UNSIGNED INTEGER) NOT IN (SELECT     form_field_8 FROM exp_freeform_form_entries_2 where user_id in (select distinct(ecd.field_id_17) from exp_channel_data ecd where ecd.entry_id = '{logged_in_id}'))
    

    【讨论】:

    • 当它应该返回'2'时返回'1'
    • 您的问题在您编辑后让我感到困惑。可以重新定义它以更清楚地解释吗?
    • 我已经用更好的描述以及列和表之间的关系更新了问题
    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 2018-05-25
    • 1970-01-01
    • 2013-05-20
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多