2016-04-11 17 views
1

私はjob_post.Nowとして単一のテーブル名を持っています。以下の表に示すように、複数の都市IDとスキルが複数のスキルIDで格納されています。異なる複数のIDが異なる列に一致する場合は、行を返します

enter image description here

私は、この表の1,2及び複数の都市のIDのような複数のスキル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]の可能な複製(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をチェックしてください。私はあなたがPHPからこれらを実行している場合、あなたはちょうどあなたが好きなだけのIDが含まれるように正規表現を変更する必要が

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),'; 

だから、それを実装するために、次を使用しています。上記のクエリは両方の行を返します。

このクエリ

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

のみJOB1を返します。あなたはこの例で遊ぶことができますhere

関連する問題