我正在尝试获取查询的“总结果”,但有点挣扎着解决它并且只是遇到错误。这是我的表格设置:
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
我需要执行一个查询,以查看(col_id_20)
中的“课程”exp_matrix_data
是否作为(form_field_8)
内的“已完成课程”exp_free_form_entries_2
存在(与[]之间的数字。然后我需要输出“未完成的课程”的“计数”
因为多个“会员”可以参加课程,所以我需要从登录的用户中查看“课程”。
每个用户都存储在exp_channel_data
中作为两个不同的ID - “用户个人资料ID”(entry_id)
,其中“课程”分配给用户,还有“唯一会员ID”{{ 1}}。
我将动态输入“用户配置文件ID”,我通常会这样做:
(field_id_17)
因此,如果我要运行查询,以查看“{1}}的”用户个人资料ID“WHERE entry_id = '{logged_in_id}'
的”唯一成员ID“(field_id_17)
是否已完成”未完成“课程“这将导致6
”未完成的课程“,因为只有43
课程已完成:
2
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]
答案 0 :(得分:0)
根据您提供的规格,我希望此查询可以让您更接近您想要的内容:
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
答案 1 :(得分:0)
这很有效。
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}'))