我編寫了一個過濾器,它生成一個查詢以顯示特殊員工。關係部門SQL
我有餐桌員工和很多1:1,1:n和n:m的關係,例如技能和語言像這樣的員工:
Employees
id name
1 John
2 Mike
Skills
id skill experience
1 PHP 3
2 SQL 1
Employee_Skills
eid sid
1 1
1 2
現在我要過濾已在使用PHP,1年SQL至少有2年工作經驗的員工。
我的過濾器始終爲每個表,關係和字段生成正確的工作查詢。
但現在我的問題是,當我想在一個相關的表中多次過濾同一個字段並且它不起作用。
e.g.
John PHP 3
John SQL 1
PHP和SQL是不同的行,所以AND不能工作。
我嘗試使用GROUP_CONCAT和FIND_IN_SET但我有,我不能超過2年FIND_IN_SET和FIND_IN_SET不知道PHP是三濾的經驗問題,SQL是1
我也試過
WHERE emp.id IN (SELECT eid FROM Employee_Skills WHERE sid IN (SELECT id FROM Skills WHERE skill = 'PHP' AND experience > 1)) AND emp.id IN (SELECT eid FROM Employee_Skills WHERE sid IN (SELECT id FROM Skills WHERE skill = 'SQL' AND experience > 0))
它適用於這個例子,但它只適用於n:m,並且知道關係類型太複雜。
我有
ski.skill = 'PHP' AND ski.experience > 1 AND ski.skill = 'SQL' AND ski.experience > 0
最終查詢,我想操縱查詢,使其工作。
查詢如何看起來像處理關係分割。
幫你一個忙,不要這樣稱呼你的聯合表('emp_ski')。使用清晰/有意義的內容,例如'employee_skills'或'employee_to_skills'。你會很高興你以後做。 –
現場'體驗'應該在'Emp_Ski'表 –
這個數據庫非常龐大複雜,這只是一個小例子來解釋我的問題。 – phpjssql