Fulltext search op meerdere tabellen
Is het mogelijk om een fulltext search te doen op meerdere tabellen?
Ik heb een query bestaande uit inner joins die 4 tabellen koppelt.
Gr,
Matthijs
Gewijzigd op 01/01/1970 01:00:00 door Matthijs
Ik weet zo geen antwoord, maar moet dit niet onder de categorie php of mysql?
Aron schreef op 06.10.2007 23:05:
Je hebt gelijk. Verplaatst.Ik weet zo geen antwoord, maar moet dit niet onder de categorie php of mysql?
Dat kan, maar een FULLTEXT sorteert automatisch op relevantie, dus daar moet je wel rekening mee houden. Op twee FULLTEXT indexen tegelijk gaan zoeken levert denk ik onvoorspelbare resultaten op.
Die relevantie is namelijk niet afhankelijk van elkaar, maar binnen de tabel zelf.
Sorry dat ik deze in de koffiehoek had gepost.
Ik ben er inmiddels uit. Ik heb m'n inner join query van 4 tabellen gebruikt.
normaal heb je een fulltext search zoiets als:
Code (php)
1
2
3
2
3
<?php
$query = "SELECT * FROM tabel WHERE MATCH (naam, straat, adres) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam";
?>
$query = "SELECT * FROM tabel WHERE MATCH (naam, straat, adres) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam";
?>
na m'n "inner join query" heb ik bij de WHERE statement bovenstaande er aan geplakt en voila.
Stuit ik nog op 1 probleem:
(Bovenstaande even achterwege gelaten)
Ik heb 4 tabellen. Als ik een zoekopdracht in kleine letters verzend dan krijg ik resultaten van de eerste 3 tabellen en niet van de 4de terwijl het zoekwoord wel in tabel 4 voorkomt.
Als ik dezelfde zoekopdracht in HOOFD letters verzend dan krijg ik resultaten van alle 4 de tabellen.
Heel vreemd
Dit is de code:
Code (php)
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
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
<?php
$query1 = "SELECT * FROM tabel1 WHERE MATCH (naam1, straat1) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam1";
$query2 = "SELECT * FROM tabel2 WHERE MATCH (naam2, straat2) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam2";
$query3 = "SELECT * FROM tabel3 WHERE MATCH (naam3, straat3) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam3";
$query4 = "SELECT * FROM tabel4 WHERE MATCH (naam4, straat4) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam4";
$resultaat1 = mysql_query($query1) or die(mysql_error());
$resultaat2 = mysql_query($query2) or die(mysql_error());
$resultaat3 = mysql_query($query3) or die(mysql_error());
$resultaat4 = mysql_query($query4) or die(mysql_error());
$totaal1 = mysql_num_rows($resultaat1);
$totaal2 = mysql_num_rows($resultaat2);
$totaal3 = mysql_num_rows($resultaat3);
$totaal4 = mysql_num_rows($resultaat4);
while($zoek1 = mysql_fetch_assoc($resultaat1)) {
echo "<tr>";
echo "<td>" . $zoek1['naam1'] . "</td>";
echo "<td width='10'></td>";
echo "<td>" . $zoek1['straat1'] . "</td>";
echo "<td width='10'></td>";
}
//en de rest op dezelfde wijze
?>
$query1 = "SELECT * FROM tabel1 WHERE MATCH (naam1, straat1) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam1";
$query2 = "SELECT * FROM tabel2 WHERE MATCH (naam2, straat2) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam2";
$query3 = "SELECT * FROM tabel3 WHERE MATCH (naam3, straat3) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam3";
$query4 = "SELECT * FROM tabel4 WHERE MATCH (naam4, straat4) AGAINST ('*" . $_POST['zoekwoord'] . "*' IN BOOLEAN MODE) ORDER BY naam4";
$resultaat1 = mysql_query($query1) or die(mysql_error());
$resultaat2 = mysql_query($query2) or die(mysql_error());
$resultaat3 = mysql_query($query3) or die(mysql_error());
$resultaat4 = mysql_query($query4) or die(mysql_error());
$totaal1 = mysql_num_rows($resultaat1);
$totaal2 = mysql_num_rows($resultaat2);
$totaal3 = mysql_num_rows($resultaat3);
$totaal4 = mysql_num_rows($resultaat4);
while($zoek1 = mysql_fetch_assoc($resultaat1)) {
echo "<tr>";
echo "<td>" . $zoek1['naam1'] . "</td>";
echo "<td width='10'></td>";
echo "<td>" . $zoek1['straat1'] . "</td>";
echo "<td width='10'></td>";
}
//en de rest op dezelfde wijze
?>
Van alle tabellen zijn de velden van het type VARCHAR
Iemand enig idee?
Gewijzigd op 01/01/1970 01:00:00 door matthijs
Ik mag hopen dat je een beetje aan het testen bent, anders ga je gegarandeerd nog een hoop problemen krijgen. Jouw huidige probleem lijkt hier al mee te maken te hebben...
geen genummerde tabelnamen. Dit is puur als voorbeeld. Zie de genummerde tabelnamen als "normale" tabelnamen. Neem tabel1 als klantinfo, tabel2 als productinfo bijvoorbeeld.
Het gaat erom dat ik niet kan verklaren waarom een zoekopdracht in kleine letters ik wel resultaten van de eerste 3 tabellen krijg en niet van de 4de terwijl het zoekwoord wel in de 4e tabel voorkomt.
Als ik dezelfde zoekopdracht in HOOFD letters verzend dan krijg ik resultaten van alle 4 de tabellen.