Mysql Kwestie geen zelfde id
Ik wil de vacatures met een cv matchen
de kolommen uit de tabel van de vacatures hebben een bv_ prefix
elke vacature is gekoppeld aan benodigheden en die hebben een vb_ prefix
De bv_id is uiteindelijk belangrijk maar die mogen maar 1 keer voor komen
omdat er een vacature (bv_id=22) bij zit met twee benodigheden laat hij ze
twee keer zien.
Welke functie die in mysql zit kan ik toepassen op welke kolom?
Gewijzigd op 27/02/2014 14:00:55 door Francoi gckx
Om de juiste te krijgen zou je nou dus op bv_id en vb_id moeten selecteren omdat geen van beide uniek is. Als die combinatie ook niet uniek is faalt het sowieso.
Toevoeging op 27/02/2014 14:09:40:
ok dus op vb_id selecteren even kijken hoor
Uniek? Dan lijkt het me niet gewenst dat ie op NULL staat (2e regel). Daar kun je dus niks mee.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT bv.bv_id, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, vb_id, bv_beschrijving, vb.vb_id,
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION SELECT bv_id, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION SELECT bv_id, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION SELECT bv_id, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION SELECT vb_id, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION SELECT vb_id, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures AS bv ON gc.bv_id = bv.bv_id
LEFT JOIN vacature_benodigheden vb ON bv.bv_id = vb.bv_id
GROUP BY gc.bv_id, bv.bv_id, vb_id, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, vb.vb_id, bv_beschrijving ORDER BY total_matches DESC
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION SELECT bv_id, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION SELECT bv_id, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION SELECT bv_id, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION SELECT vb_id, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION SELECT vb_id, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures AS bv ON gc.bv_id = bv.bv_id
LEFT JOIN vacature_benodigheden vb ON bv.bv_id = vb.bv_id
GROUP BY gc.bv_id, bv.bv_id, vb_id, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, vb.vb_id, bv_beschrijving ORDER BY total_matches DESC
Toevoeging op 27/02/2014 14:13:53:
Michael - op 27/02/2014 14:12:27:
Uniek? Dan lijkt het me niet gewenst dat ie op NULL staat (2e regel). Daar kun je dus niks mee.
Dat is omdat bv_id 15 geen benodigheden heeft
Toevoeging op 27/02/2014 16:21:56:
Michael - op 27/02/2014 14:12:27:
Uniek? Dan lijkt het me niet gewenst dat ie op NULL staat (2e regel). Daar kun je dus niks mee.
Dat is omdat bv_id 15 geen benodigheden heeft
Na wat geklooi en met het fragmentje hier onder ben ik een stukje verder,
1) gebruik geen GROUP BY om unieke waardes te selecteren, maar DISTINCT. Een GROUP BY is bedoeld om bepaalde gevonden rijen te groeperen en zo bepaalde kolommen te kunnen sommeren bijvoorbeeld. Een GROUP BY is in principe alleen geldig in combinatie met een aggregate functie die jij hier niet gebruikt. DISTINCT gebruik je als je alleen unieke combinaties wilt hebben van de geselecteerde kolommen. Dit is wat jij doet. Je query zou dus moeten zijn:
2) Als je resultaten via een UNION aan elkaar plakt hoef je niet de kolom alias bij elke selectie te plaatsen. In de uiteindelijk resultset kan elke kolom maar 1 naam hebben, dus alleen bij de eerste SELECT in de UNION hoef je een eventuele alias op te geven, de rest volgt per definitie. Scheelt je code en maakt je query een stuk beter leesbaar.
Verder is me niet helemaal duidelijk of je probleem nu is opgelost of niet :-)
Gewijzigd op 27/02/2014 17:01:09 door Erwin H
2. Ok copy that.
Over het resultaat gesproken ben ik niet content mee als ik dus alleen:
Ok dan laat die in iedergeval maar 1 keer een bv_id van 22 zien
Maar toch blijf ik een probleem houden als een matched_word dubbel is in welke kolom dan ook
dan telt hij dat niet meer mee. (Legenda;) de stippen zijn de daadwerklijke match getallen)
Met de query zo staan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT bv.bv_id, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, bv_beschrijving, vb.vb_id, vb.vb_benodigheden,
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION SELECT bv_id, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION SELECT bv_id, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION SELECT bv_id, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION SELECT bv_id, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION SELECT bv_id, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures AS bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT DISTINCT bv_id, vb_id, vb_benodigheden
FROM vacature_benodigheden) vb
ON gc.bv_id = vb.bv_id
GROUP BY gc.bv_id, vb_id, bv.bv_id, vb_benodigheden, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, bv_beschrijving ORDER BY total_matches DESC
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION SELECT bv_id, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION SELECT bv_id, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION SELECT bv_id, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION SELECT bv_id, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION SELECT bv_id, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures AS bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT DISTINCT bv_id, vb_id, vb_benodigheden
FROM vacature_benodigheden) vb
ON gc.bv_id = vb.bv_id
GROUP BY gc.bv_id, vb_id, bv.bv_id, vb_benodigheden, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, bv_beschrijving ORDER BY total_matches DESC
Gewijzigd op 27/02/2014 18:11:22 door Francoi gckx
Het lukt me op dit moment even niet om er echt diep in te duiken, maar als ik het goed begrijp krijg je bepaalde resultaten nu niet te zien? Als dat het geval is dan kan dat liggen aan je UNION. Een UNION selecteert over het algemeen alleen alle verschillende rijen. Je zou kunnen proberen daar UNION ALL van te maken. Alleen ik vraag me af of dat je helpt, want dan zou je hooguit twee keer hetzelfde resultaat uit die subquery krijgen. Volgens mij kan dat nooit zijn wat je wilt.
En het telt en neemt in de matched_words alleen die van bv_categorie of bv_functie op.
Ik heb wat meer waardes die moeten match erbij gevoegd
en je heb waarschijnlijk gelijk met dat die maar twee keer hetzelfde resultaat laat zien
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT DISTINCT bv.bv_id, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, bv_beschrijving, vb.vb_id, vb.vb_benodigheden,
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION ALL SELECT bv_id, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION SELECT bv_id, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION ALL SELECT bv_id, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION ALL SELECT bv_id, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures AS bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT DISTINCT bv_id, vb_id, vb_benodigheden
FROM vacature_benodigheden) vb
ON gc.bv_id = vb.bv_id
GROUP BY gc.bv_id, vb_id, bv.bv_id, vb_benodigheden, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, bv_beschrijving ORDER BY total_matches DESC
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION ALL SELECT bv_id, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION SELECT bv_id, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION ALL SELECT bv_id, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION ALL SELECT bv_id, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures AS bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT DISTINCT bv_id, vb_id, vb_benodigheden
FROM vacature_benodigheden) vb
ON gc.bv_id = vb.bv_id
GROUP BY gc.bv_id, vb_id, bv.bv_id, vb_benodigheden, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, bv_beschrijving ORDER BY total_matches DESC
Indien ik dan andere resultaten krijg dan verwacht, dan ga ik stukje bij beetje wat voor resultaten ik krijg als ik bv alleen een subquery uitvoer.
En laat eens zien wat dan de uitkomst is van de eerste subquery, dan kunnen we wat beter beoordelen.
En volgens mij heeft de subquery in de LEFT JOIN geen enkel nut.
Als ik nu geen left join doe kan ik vb_benodigheden en vb_id niet renderen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT bv.bv_id, bv.bv_functie, bv_plaats, bv_categorie, bv_beschrijving,
vb_benodigheden, vb_id,
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, bv_functie, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, bv_categorie, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, bv_plaats, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION ALL SELECT bv_id, bv_beschrijving, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION ALL SELECT bv_id, bv_beschrijving, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION ALL SELECT bv_id, vb_benodigheden, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION ALL SELECT bv_id, vb_benodigheden, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT bv_id, vb_benodigheden, vb_id
FROM vacature_benodigheden) vb
ON gc.bv_id = vb.bv_id
GROUP BY bv.bv_id,bv_functie, bv_plaats, bv_categorie, bv_beschrijving, vb_benodigheden, vb_id ORDER BY total_matches DESC
vb_benodigheden, vb_id,
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, bv_functie, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, bv_categorie, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, bv_plaats, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION ALL SELECT bv_id, bv_beschrijving, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION ALL SELECT bv_id, bv_beschrijving, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION ALL SELECT bv_id, vb_benodigheden, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION ALL SELECT bv_id, vb_benodigheden, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT bv_id, vb_benodigheden, vb_id
FROM vacature_benodigheden) vb
ON gc.bv_id = vb.bv_id
GROUP BY bv.bv_id,bv_functie, bv_plaats, bv_categorie, bv_beschrijving, vb_benodigheden, vb_id ORDER BY total_matches DESC
resultaat:
Als ik group_Concat doe op vb_benodigheden en vb_id
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT bv.bv_id, bv.bv_functie, bv_plaats, bv_categorie, bv_beschrijving,
vb_benodigheden, vb_id,
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, bv_functie, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, bv_categorie, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, bv_plaats, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION ALL SELECT bv_id, bv_beschrijving, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION ALL SELECT bv_id, bv_beschrijving, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION ALL SELECT bv_id, vb_benodigheden, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION ALL SELECT bv_id, vb_benodigheden, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT bv_id, GROUP_CONCAT(vb_benodigheden) as vb_benodigheden, GROUP_CONCAT(vb_id) vb_id
FROM vacature_benodigheden) vb
ON bv.bv_id = vb.bv_id
GROUP BY bv.bv_id,bv_functie, bv_plaats, bv_categorie, bv_beschrijving ORDER BY total_matches DESC
vb_benodigheden, vb_id,
COUNT(*) AS total_matches, GROUP_CONCAT(gc.matched_word) AS matched_words
FROM ( SELECT bv_id, bv_functie, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_functie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, bv_categorie, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE bv_categorie LIKE '%webdeveloper%'
UNION ALL SELECT bv_id, bv_plaats, 'helleb' AS matched_word FROM beheer_vacatures WHERE bv_plaats LIKE '%helleb%'
UNION ALL SELECT bv_id, bv_beschrijving, 'tsw1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%tsw1%'
UNION ALL SELECT bv_id, bv_beschrijving, 'kb1' AS matched_word FROM beheer_vacatures WHERE bv_beschrijving LIKE '%kb1%'
UNION ALL SELECT bv_id, vb_benodigheden, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%tsw1%'
UNION ALL SELECT bv_id, vb_benodigheden, 'kb1' AS matched_word FROM vacature_benodigheden WHERE vb_benodigheden LIKE '%kb1%'
) AS gc
INNER JOIN beheer_vacatures bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT bv_id, GROUP_CONCAT(vb_benodigheden) as vb_benodigheden, GROUP_CONCAT(vb_id) vb_id
FROM vacature_benodigheden) vb
ON bv.bv_id = vb.bv_id
GROUP BY bv.bv_id,bv_functie, bv_plaats, bv_categorie, bv_beschrijving ORDER BY total_matches DESC
Resultaat:
Het zijn allebei tegengestelde resultaten:)
Gewijzigd op 27/02/2014 22:19:22 door Francoi gckx
Ik zei ook niet dat het zonder LEFT JOIN moet maar zonder de subquery in de LEFT JOIN.
Die kost je alleen maar performance.
Hetzelfde geldt overigens ook voor de GROUP_CONCAT functie.
Maar welk resultaat verwacht je nu?
Ik verwacht in iedergeval een juiste matching dat echt ook alles word gezocht op basis van de gegeven waardes
>> Als ik nu geen left join doe kan ik vb_benodigheden en vb_id niet renderen.
Alhoewel dat handig geweest was om te controleren of hij de woorden heeft opgenomen en niet dezelfde heeft gepakt (maar dan bedoel ik een herhalende zelfde waarde in dezelfde row/kolom).
Is dat niet echt nodig meer ik heb nu gewoon een tabel met: functie, plaats, aantal gematche woorde, de gematchede woorden en dat is wel goed zo.
Als ik toch vb_benodigheden en vb_id in de verwachte tabel wil dan hoe ik ook de query opbouw krijg ik of
teveel rows terug of ik krijg problemen met dat hij de verkeerde aantal geef etc etc.
Dus ik ben wel content hiermee de query is zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT bv.bv_id, bv.bv_functie, bv.bv_plaats, bv.bv_categorie, COUNT(*) AS total_matches, GROUP_CONCAT(DISTINCT gc.matched_word) AS matched_words
FROM ( SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE ((bv_functie LIKE '%webdeveloper%' AND 'webdeveloper' != ''))
UNION ALL SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE ((bv_categorie LIKE '%webdeveloper%' AND 'webdeveloper' != ''))
UNION ALL SELECT bv_id, 'helleb' AS matched_word FROM beheer_vacatures WHERE ((bv_plaats LIKE '%helleb%' AND 'helleb' != '')) UNION ALL SELECT bv_id, 'tsw1' AS matched_word FROM beheer_vacatures WHERE ((bv_beschrijving LIKE '%tsw1%' AND 'tsw1' != ''))
UNION ALL SELECT bv_id, 'kb1' AS matched_word FROM beheer_vacatures WHERE ((bv_beschrijving LIKE '%kb1%' AND 'kb1' != '')) UNION ALL SELECT bv_id, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE ((vb_benodigheden LIKE '%tsw1%' AND 'tsw1' != ''))
UNION ALL SELECT bv_id, 'kb1' AS matched_word FROM vacature_benodigheden WHERE ((vb_benodigheden LIKE '%kb1%' AND 'kb1' != '')) ) AS gc
INNER JOIN beheer_vacatures AS bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT DISTINCT bv_id FROM vacature_benodigheden) vb ON gc.bv_id = vb.bv_id GROUP BY gc.bv_id, bv.bv_functie, bv.bv_plaats, bv.bv_categorie ORDER BY total_matches DESC
FROM ( SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE ((bv_functie LIKE '%webdeveloper%' AND 'webdeveloper' != ''))
UNION ALL SELECT bv_id, 'webdeveloper' AS matched_word FROM beheer_vacatures WHERE ((bv_categorie LIKE '%webdeveloper%' AND 'webdeveloper' != ''))
UNION ALL SELECT bv_id, 'helleb' AS matched_word FROM beheer_vacatures WHERE ((bv_plaats LIKE '%helleb%' AND 'helleb' != '')) UNION ALL SELECT bv_id, 'tsw1' AS matched_word FROM beheer_vacatures WHERE ((bv_beschrijving LIKE '%tsw1%' AND 'tsw1' != ''))
UNION ALL SELECT bv_id, 'kb1' AS matched_word FROM beheer_vacatures WHERE ((bv_beschrijving LIKE '%kb1%' AND 'kb1' != '')) UNION ALL SELECT bv_id, 'tsw1' AS matched_word FROM vacature_benodigheden WHERE ((vb_benodigheden LIKE '%tsw1%' AND 'tsw1' != ''))
UNION ALL SELECT bv_id, 'kb1' AS matched_word FROM vacature_benodigheden WHERE ((vb_benodigheden LIKE '%kb1%' AND 'kb1' != '')) ) AS gc
INNER JOIN beheer_vacatures AS bv ON gc.bv_id = bv.bv_id
LEFT JOIN (SELECT DISTINCT bv_id FROM vacature_benodigheden) vb ON gc.bv_id = vb.bv_id GROUP BY gc.bv_id, bv.bv_functie, bv.bv_plaats, bv.bv_categorie ORDER BY total_matches DESC