2016-04-11 22 views
1

Tek bir tablo adı olarak job_post.Now int bu tablo, birden fazla şehir kimliği ve aşağıdaki tabloda gösterildiği gibi birden çok beceri kimliği ile depolanan yetenekle depolanır.Farklı sütunlarla farklı çoklu kimlik eşleşmeleri varsa, satır döndürün

enter image description here

ben bu tabloda 1,2 ve çoklu şehir kimliği gibi birden beceri kimliği kullanarak arama yapmak istiyorum.

böyle sorguyu denedim:

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

Yani, şehir 1 var bir sonuç var ama beceri veya şehir sütunundan tek id eşleşirse yerine bunun hem satır istiyorum.

Peki hangi sorguyu yazmak zorundayım?

+0

Örneğiyle oynayabilirsiniz [Birden çok arama dizesiyle [MySQL find \ _in \ _set] dosyasının olası kopyası (http://stackoverflow.com/questions/5015403/mysql-find-in-set-with-multiple- search-string) – alex9311

+0

Eğer beceri sütununda ** 1,3 ** ve şehir sütunu ** 1,3 ** olarak görüyorsanız, her iki satırı da dönmek istiyorum. ** 3 ** id, beceri sütununda ve * olduğundan * 1 ** kimlik şehir sütununda. –

cevap

0

Bu gereksiz karmaşık sorgu, gerçekten enter image description here

Bunu ayarlamak için yabancı anahtarları ve ek tablolar kullanmalıdır Ama aynı şemayı tutmak istiyorsanız bir kesmek kullanabilirsiniz olduğunu. Bazı örnekler için this post'u kontrol edin. Sana php bu yürütme eğer, sadece istediğiniz kadar kimlikleri dahil etmek regex değiştirmeniz gerekir

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

Yani bunu uygulamaya aşağıdaki kullanın. Yukarıdaki sorgu her iki satırı da döndürür.

Bu sorgu

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

Sadece job1 döndürür. here

İlgili konular