Ik zit nu al een tijdje te klootzakken, en ik kom er echt niet uit gewoon. Nou ben ik al niet zo'n enorme held in SQL, dus alle tips zijn welkom 
Dit is het database ontwerp (relevante gedeelte)
In deze tabellen staan dus verschillende bedrijven, die tot verschillende sectoren en verschillende bedrijfssoorten horen.
Nu moet ik een zoekfunctie toepassen op deze tabellen. Ik dacht, nou laat ik nou eens dat fenomeen FULLTEXT search uitproberen. vandaar al die fulltext indices.
Dus een searchquery wordt ongeveer als volgt:
waar "asdfsdf" dus de zoekwoorden zijn die men invult. Nou, dat gaat allemaal prima. Maar, mijn mooie bladerfunctie (met LIMIT x,y) heeft ook een COUNT() op deze resultaten nodig.
Dus ik dacht, ok, dezelfde criteria (WHERE gedeelte) en dezelfde GROUP BY, zou toch een goede COUNT() op moeten leveren:
nee dus. Dan krijg ik dus een aantal counts.
De counts die ik dan namelijk krijg is de volgende:
wanneer ik geen GROUP BY deed in de bovenste query, kreeg ik per bedrijf meerdere resultaten. Hoeveel resultaten dat dus zijn per bedrijf is dus deze count. Logisch, want ik group by companies.companyID... toch?
Oh, maar dan moet je toch gewoon COUNT(* ) gebruiken, zonder GROUP BY?? Nee, want dan COUNT hij dus wel op meerdere resultaten per bedrijf, terwijl dat dus niet moest...
Hoe krijg ik dan wel het totaal??
Ik zit vast gewoon de verkeerde kant op te denken, dus wie geeft me een zetje in de goeie richting?
Dit is het database ontwerp (relevante gedeelte)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| tabel companies --------------- companyID PK name \ samengestelde FULLTEXT index city / tabel comtypes -------------- comTypeID PK name FULLTEXT index tabel com_typ ------------- comTypeID \ samengestelde PK companyID / tabel sectors ------------- sectorID PK name FULLTEXT index tabel com_sec ------------- sectorID \ samengestelde PK companyID / |
In deze tabellen staan dus verschillende bedrijven, die tot verschillende sectoren en verschillende bedrijfssoorten horen.
Nu moet ik een zoekfunctie toepassen op deze tabellen. Ik dacht, nou laat ik nou eens dat fenomeen FULLTEXT search uitproberen. vandaar al die fulltext indices.
Dus een searchquery wordt ongeveer als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| SELECT
companies.companyID,
companies.name,
companies.city,
MATCH(companies.name,companies.city) AGAINST ( 'asdfsdf' ) +
MATCH(comtypes.name) AGAINST ('asdfsdf') +
MATCH(sectors.name) AGAINST ('asdfsdf')
as score
FROM
comtypes
LEFT JOIN
com_typ
USING (comTypeID)
LEFT JOIN
companies
USING (companyID)
LEFT JOIN
com_sec
USING(companyID)
LEFT JOIN
sectors
USING(sectorID)
WHERE (
MATCH(companies.name,companies.city) AGAINST ( 'asdfsdf' )
OR MATCH(comtypes.name) AGAINST ('asdfsdf')
OR MATCH(sectors.name) AGAINST ('asdfsdf')
)
GROUP BY
companies.companyID
ORDER BY
score DESC |
waar "asdfsdf" dus de zoekwoorden zijn die men invult. Nou, dat gaat allemaal prima. Maar, mijn mooie bladerfunctie (met LIMIT x,y) heeft ook een COUNT() op deze resultaten nodig.
Dus ik dacht, ok, dezelfde criteria (WHERE gedeelte) en dezelfde GROUP BY, zou toch een goede COUNT() op moeten leveren:
code:
1
2
3
4
5
6
7
8
| SELECT COUNT(companies.companyID) as cnt FROM ## dezelfde JOINed meuk ## WHERE ## dezelfde MATCH meuk ## GROUP BY companies.companyID |
nee dus. Dan krijg ik dus een aantal counts.
De counts die ik dan namelijk krijg is de volgende:
wanneer ik geen GROUP BY deed in de bovenste query, kreeg ik per bedrijf meerdere resultaten. Hoeveel resultaten dat dus zijn per bedrijf is dus deze count. Logisch, want ik group by companies.companyID... toch?
Oh, maar dan moet je toch gewoon COUNT(* ) gebruiken, zonder GROUP BY?? Nee, want dan COUNT hij dus wel op meerdere resultaten per bedrijf, terwijl dat dus niet moest...
Hoe krijg ik dan wel het totaal??
Ik zit vast gewoon de verkeerde kant op te denken, dus wie geeft me een zetje in de goeie richting?
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz