从多个表和字符串中选择

时间:2013-06-14 10:46:56

标签: mysql arrays string count expressionengine

我正在尝试获取查询的“总结果”,但有点挣扎着解决它并且只是遇到错误。这是我的表格设置:

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]

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

检查sqlfiddle

答案 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}'))