Hallo Falk Prüfer,
ja dass sieht gut aus, Problem ist:
, dass geht nicht, denke ich zumindest, habs eben auch Probiert .
Ergebnis:
Da ja die Spalte ind.d_kat nicht in der selben Tabelle ist wie die Spalte comp.Companyname, schein dass nicht zu funktionieren. Es müsste ein vereinter Index (Fulltext) über beide Spalten gelegt werden. Deshalb auch die Union. Dies sind quasi zwei einzelne Abfragen, eine prüft ob der Suchbegriff in den Kategorien vorkommt, sucht dann anhand einer Kat_ID in einer Zuordnungstabelle die Firmen_ID`s und dann in der Haupttabelle die entsprechenden Firmen. Die zweite prüft gleichzeitig ob der suchbegriff in der Spalte Companyname vorkommt und muß ja dann nicht den Umweg über die beiden anderen Tabellen nehmen, also ohne Joins.
Und die gefundenen werden dann über union zusammengeführt, also alle die in der kat sind+alle die den begriff im namen haben oder sogar beides.
Vieleicht geht es ja mit deinem ansatz, aber so erstmal nicht. Vieleicht hab ich ja noch nen denkfehler.
Kannst mir ja noch mal einen anstoß geben, wär nett.
Folgende Abfrage funktioniert übrigens fast prima, hatte ich heute festgestellt, leider noch bei manchen suchbegriffen 1-2 sec. teilweise aber auch 0,5sec.
Alle Indizies werden sauber genutzt, habe ich mit Explain getestet.
Weiß nicht ob hier noch was zu optimieren geht.
mfg
r.geiseler
ja dass sieht gut aus, Problem ist:
Code:
(MATCH (comp.Companyname, ind.d_kat) AGAINST ('Afro'))
Ergebnis:
Incorrect arguments to MATCH
Und die gefundenen werden dann über union zusammengeführt, also alle die in der kat sind+alle die den begriff im namen haben oder sogar beides.
Vieleicht geht es ja mit deinem ansatz, aber so erstmal nicht. Vieleicht hab ich ja noch nen denkfehler.
Kannst mir ja noch mal einen anstoß geben, wär nett.
Folgende Abfrage funktioniert übrigens fast prima, hatte ich heute festgestellt, leider noch bei manchen suchbegriffen 1-2 sec. teilweise aber auch 0,5sec.
SELECT company.id, company.Companyname, company.STREET, company.ZIPCODE, company.Location
FROM company
INNER JOIN company_industry ON company.id = company_industry.company_id
INNER JOIN industry ON company_industry.industry_id = industry.id
WHERE MATCH (company.location, company.STREET)AGAINST ('Hamburg') AND (MATCH (company.Companyname)AGAINST ('Abbeizarbeiten'))
UNION
SELECT company.id, company.Companyname, company.STREET, company.ZIPCODE, company.Location
FROM company
INNER JOIN company_industry ON company.id = company_industry.company_id
INNER JOIN industry ON company_industry.industry_id = industry.id
WHERE MATCH (company.location, company.STREET)AGAINST ('Hamburg')AND (MATCH (industry.d_kat)AGAINST ('Abbeizarbeiten'))ORDER BY Companyname
FROM company
INNER JOIN company_industry ON company.id = company_industry.company_id
INNER JOIN industry ON company_industry.industry_id = industry.id
WHERE MATCH (company.location, company.STREET)AGAINST ('Hamburg') AND (MATCH (company.Companyname)AGAINST ('Abbeizarbeiten'))
UNION
SELECT company.id, company.Companyname, company.STREET, company.ZIPCODE, company.Location
FROM company
INNER JOIN company_industry ON company.id = company_industry.company_id
INNER JOIN industry ON company_industry.industry_id = industry.id
WHERE MATCH (company.location, company.STREET)AGAINST ('Hamburg')AND (MATCH (industry.d_kat)AGAINST ('Abbeizarbeiten'))ORDER BY Companyname
Weiß nicht ob hier noch was zu optimieren geht.
mfg
r.geiseler
Comment