2016-04-11 15 views
1

Ich habe einzelne Tabellenname als job_post.Now int dieser Tabelle Stadt mit der mehrfachen Stadt ID gespeichert und Fähigkeit gespeichert mit der multiple Fähigkeit ID wie in der Tabelle unten angezeigt.Return-Zeile, wenn verschiedene multiple ID übereinstimmt mit verschiedenen Spalte

enter image description here

Ich möchte in dieser Tabelle mit mehreren Schwierigkeits-ID wie 1,2 und mehrere Stadt-ID suchen.

Ich habe Abfrage wie folgt versucht:

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

Also, ich bekam ein Ergebnis, das 1 Stadt haben, aber ich will beide Reihe statt es, wenn es einzelne ID aus Geschick oder Stadt Spalte übereinstimmt.

Also welche Abfrage sollte ich schreiben müssen?

+0

Mögliche Duplikat von [MySQL find \ _in \ _set mit mehreren Suchzeichenfolgen] (http://stackoverflow.com/questions/5015403/mysql-find-in-set-with-multiple-) search-string) – alex9311

+0

Ich möchte beide Zeilen zurückgeben, wenn Sie in der Spalte für die Fähigkeiten als ** 1,3 ** und die Spalte für die Stadt als ** 1,3 ** finden, weil ** 3 ** id in der Spalte "skill" und * steht * 1 ** ID ist in der Stadtspalte. –

Antwort

0

Dies ist eine unnötig komplizierte Abfrage, die Sie wirklich Fremdschlüssel und zusätzliche Tabellen dieses enter image description here

einzurichten verwenden sollten, aber wenn Sie das gleiche Schema halten möchten, können Sie einen Hack verwenden. Überprüfen Sie this post für einige Beispiele. Ich verwende den folgenden es

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

So zu implementieren, wenn Sie diese von PHP sind ausführen, müssen Sie nur die Regex ändern, so viele IDs enthalten, wie Sie wollen. Die obige Abfrage gibt beide Zeilen zurück.

Diese Abfrage

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

gibt nur job1. Sie können mit dem Beispiel here

Verwandte Themen