我有一张名为'vacancies'的表,其中有一个'vacancy_id'PK。它看起来像这样:
create table vacancies
(
vacancy_id int not null auto_increment,
org_id int not null,
name varchar(255) not null comment 'title',
vacancy_visibility_start_date datetime comment 'vacancy visibility date, when it needs to be active on the website',
vacancy_visibility_end_date datetime,
primary key (vacancy_id)
);
在此之后,我有几个与此链接的表。
create table vacancy_calendar
(
vacancy_calendar_id int not null auto_increment,
vacancy_id int,
date_from datetime not null,
date_to datetime not null,
primary key (vacancy_calendar_id)
);
create table vacancy_interests
(
vacancy_id int,
interest_id int
);
create table vacancy_skills
(
vacancy_id int,
skill_id int
);
所有这些表都可以包含同一个vacancy_id的多个行。
我的页面有不同的过滤器,我想通过AJAX处理。 我希望每个空缺一行包含我需要的所有数据+它必须符合我的过滤标准。但是我不确定我的查询是如何看起来的,以便检索我正在寻找的结果。 可以过滤'interest_id','skill_id','date_from'和'date_to'。
我从以下查询开始,但我的速度非常快:
SELECT v.*, vi.interest_id
FROM `vacancies` as v
INNER JOIN `vacancy_interests` as vi on v.vacancy_id = vi.vacancy_id
GROUP BY v.vacancy_id
即使空缺在vacancy_interest表中有3个interest_id行,此查询也只会返回1 interest_id的空缺。如果我删除了GROUP BY语句,我会得到3行同样的空缺,这也不是我想要的。
理想情况下,我希望interest_id分别位于单独的列中或由逗号分隔的同一字段中。或者,如果有任何其他可能性/建议随时分享!
答案 0 :(得分:2)
您可以使用group_concat获取以逗号分隔的interest_id
SELECT v.*, group_concat(vi.interest_id)
FROM `vacancies` as v
INNER JOIN `vacancy_interests` as vi on v.vacancy_id = vi.vacancy_id
GROUP BY v.vacancy_id
参考你关于添加例如:
的评论您可以添加条件
SELECT v.*, group_concat(vi.interest_id)
FROM `vacancies` as v
INNER JOIN `vacancy_interests` as vi on v.vacancy_id = vi.vacancy_id
INNER JOIN `vacancy_skills` as vs ON vs.vacancy_id = v.vacancy_id
WHERE vs.skill_id IN (4) AND vi.interest_id IN (1,3)
GROUP BY v.vacancy_id
在这种情况下,gorup_concat应用于生成的行..因为group by对选定的结果行执行相关操作。