Fulltext verchillende velden
Ik ben bezig met een online gegevensbank voor een dierenkliniek. Maar ik zit een beetje in de knoop met de zoekfunctie. Ik heb de opties van fulltext search eens bekeken, maar naar wat ik ervan heb begrepen is het niet mogelijk om veldspecifiek te zoeken.
Een voorbeeld:
Een klant met naam "Janssen" en straat "Stationsstraat" met zijn huisdier "Woefie" van het ras "labrador" die vroeger gebeten is door een pitbull en daarvoor behandeld is.
Als ik deze klant nu wil opzoeken in de database, maar ik weet enkel nog dat zijn hond een labrador was en dat ie gebeten was door een pitbull kan dat mbv
SELECT naamklant, straat, naamdier, ras, behandeling FROM klantendb WHERE MATCH(ras, behandeling) AGAINST('pitbull, labrador' IN BOOLEAN MODE);
MAAR: nu zou ik graag in de resultaten enkel de labradors krijgen die gebeten zijn door een pitbull (dus waar 'ras' --> "labrador" en 'behandeling' het woord "pitbull" bevat), en niet de pitbulls die door een labrador zijn gebeten ('ras'-->"pitbull" en 'behandeling'-->"labrador"). Ik zou dus graag veldspecifiek zoeken. Is dit mogelijk ?
En dan nog een volgend vraagje: stel dat ik nu 1 tabel heb met de klanten en 1 tabel voor de dieren (met telkens een verwijzing naar het id-nummer van hun baasje), en ik wil bvb alle klanten met de naam "Peeters" die een "jack russell" hebben opzoeken. Is het hier dan mogelijk om veldspecifiek te zoeken in 2 verschillende tabellen ?
Ik hoop dat ik het een beetje duidelijk heb uitgelegd... alvast merci !
Gewijzigd op 01/01/1970 01:00:00 door Woffer
In je oorspronkelijke voorbeeld moet volgens mij de komma tussen 'pitbull' en 'labrador' weg.
Het gaat namelijk om een zoekstring die een gebruiker opgeeft.
De BOOLEAN mode van een FULLTEXT search helpt ook eigenlijk alleen als je gebruikers de syntax kennen.
"pitbull labrador" komt eigenlijk neer op +pitbull +labrador en vindt records waarin beide woorden moeten voorkomen in 1 of beide velden van je FULLTEXT index.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql = "
SELECT naamklant, straat, naamdier, ras, behandeling
FROM klantendb
WHERE MATCH(ras, behandeling) AGAINST('pitbull labrador' IN BOOLEAN MODE)
";
?>
$sql = "
SELECT naamklant, straat, naamdier, ras, behandeling
FROM klantendb
WHERE MATCH(ras, behandeling) AGAINST('pitbull labrador' IN BOOLEAN MODE)
";
?>
Helaas kan een FULLTEXT search niet veldspecifiek werken, dus je tweede query zou er zo uit moeten zien:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql = "
SELECT naamklant, straat, naamdier, ras, behandeling
FROM klantendb
WHERE ras LIKE '%labrador%'
AND behandeling LIKE '%pitbull%'
";
?>
$sql = "
SELECT naamklant, straat, naamdier, ras, behandeling
FROM klantendb
WHERE ras LIKE '%labrador%'
AND behandeling LIKE '%pitbull%'
";
?>
Je tweede vraag:
Maar is hetvolgende ook mogelijk?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql = "
SELECT klanten.naam, dieren.ras, dieren.behandeling
FROM klanten, dieren
WHERE klanten.id = dieren.baasje_id
AND MATCH(dieren.ras) AGAINST('labrador' IN BOOLEAN MODE)
AND MATCH(dieren.behandeling) AGAINST('pitbull' IN BOOLEAN MODE)";
?>
$sql = "
SELECT klanten.naam, dieren.ras, dieren.behandeling
FROM klanten, dieren
WHERE klanten.id = dieren.baasje_id
AND MATCH(dieren.ras) AGAINST('labrador' IN BOOLEAN MODE)
AND MATCH(dieren.behandeling) AGAINST('pitbull' IN BOOLEAN MODE)";
?>
Dit zou handiger zijn omdat de fulltext search toch enkele voordelen biedt ten opzichte van de LIKE search...
Gewijzigd op 01/01/1970 01:00:00 door woffer
Dat zou wel kunnen, maar dan moet je wel aparte FULLTEXT indexen aanmaken. Eéntje voor het veld 'ras', en ééntje voor het veld 'behandeling'.
(btw: om fulltext indexen aan te maken is het toch voldoende om het vakje fulltext aan te klikken in het desgewenste veld van de database, niet?)