我有一個名爲'vacancycies'的表有一個'vacancy_id'PK。它看起來像這樣:使用不同表格和過濾器的MySQL查詢
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
這個查詢只能返回我1個interest_id的空缺,即使有空位的vacancy_interest表3個interest_id行。如果我刪除了GROUP BY語句,我會得到3行的空缺,這不是我想要的。
理想情況下,我想將interest_id分別放在單獨的列中或由逗號分隔的相同字段中。或者如果有任何其他可能性/建議,請隨時分享!
作爲一個後續問題:如果我想在WHERE語句中添加一些過濾,如下WHERE vsskill_id IN(4)和vi.interest_id IN(1,3)。我該如何解決這個問題?這樣做會使得group_concat字段總是隻返回在where子句中傳遞的整數。 – Dennis
@ Dennis ...我已經更新了答案.. – scaisEdge
這不起作用,正如我在評論中提到的。考慮我有一行,其中skill_id列包含值「1,4,8」(因爲group_concat)。如果使用我的查詢與vs.skill_id IN(4)where子句,vs.skill_id列將只返回我4,而我也想保留在那裏的1和8值 – Dennis