0

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

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 中——“(entry_id)课程”分配给用户的“用户配置文件 ID”,以及“唯一会员 ID” (field_id_17)

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

WHERE entry_id = '{logged_in_id}'

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

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]

4

2 回答 2

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

检查sqlfiddle

于 2013-06-14T11:10:06.897 回答
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}'))
于 2013-06-14T11:19:48.347 回答