2016-04-11 69 views
1

我將單個表名稱作爲job_post.Now int此城市表與多個城市ID一起存儲,並且具有多個技能ID存儲的技能,如下表所示。如果不同的多重ID與不同的列匹配,則返回行

enter image description here

我想用多種技能ID想在這個表1,2和多個城市的ID進行搜索。

我已經試過這樣的查詢:

select * from job_post where FIND_IN_SET(city, '1,3') or FIND_IN_SET(skill, '1,3') 

所以,我得到了一個結果,其中有城市1,但我想這兩個行,而不是它,如果它單一ID從技能或城市列相匹配。

那麼,我應該寫什麼查詢?

+0

[MySQL find \ _in \ _set with multiple search string]可能重複(http://stackoverflow.com/questions/5015403/mysql-find-in-set-with-multiple-搜索字符串) – alex9311

+0

如果您在技能列中找到** 1,3 **和城市列爲** 1,3 **,我想要返回這兩行,因爲** 3 ** id在技能列和* * 1 ** id在城市列。 –

回答

0

這是一個不必要的複雜的查詢,你真的應該使用外鍵和其他表設置此 enter image description here

但是,如果你想保持相同的架構,你可以使用黑客。查詢this post的一些例子。我使用以下來實現它

Create Table job_post (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(50), 
    skill VARCHAR(50), 
    city VARCHAR(50) 
); 

INSERT INTO job_post (name,skill,city) 
    VALUES ('job1','2,3','1,2'), 
    ('job2','2,3,12,13','1'); 

SELECT * FROM job_post WHERE CONCAT(',', skill, ',') REGEXP ',(1|3),' 
    OR CONCAT(',', city, ',') REGEXP ',(1|3),'; 

所以,如果你是從PHP執行這些,你只需要改變正則表達式包括儘可能多的ID。上面的查詢返回兩行。

這個查詢

SELECT * FROM job_post WHERE CONCAT(',', skill, ',') REGEXP ',(1),' OR CONCAT(',', city, ',') REGEXP ',(2|3),'; 

只返回JOB1。你可以玩這個例子here

相關問題