Hi zusammen,
ich habe in einer Tabelle "tab_entries" mehrere Text-Einträge u.a. mit den Spalten "f_hits" (= Anzahl Aufrufe), "f_cat_id" (= zugehörige Kategorie-ID) und "f_status_id" (= ID des Status eines Eintrags wie "erledigt").
In einer weiteren Tabelle "tab_search_index" befindet sich ein Suchindex mit den Spalten "f_word" (= Wort im Text) und "f_entry_id" (= ID des Eintrags, in dem das Wort enthalten ist).
Nun möchte ich nach einem der indizierten Wörter suchen und die zugehörigen Einträge bekommen.
Prinzipiell funktioniert das wie folgt:
SQL-Code:
SELECT e.* FROM tab_entries e
JOIN tab_search_index i
ON i.f_entry_id = e.id
WHERE i.f_word = 'Suchbegriff'
Das nur zum verständlichen Einstieg in die Thematik.
Nun gibt es noch 2 weitere Tabellen "tab_entries_status" (= Status eines Eintrags wie "erledigt", "nicht erledigt") und "tab_categories" (= sämtliche Kategorien, denen Einträge zugeordnet werden können).
Da ich diese Daten auch haben möchte, würde sich die
SQL-Abfrage wie folgt erweitern:
SQL-Code:
SELECT e.*, s.f_status_name, c.f_name FROM tab_entries e
JOIN tab_categories c
ON c.id = e.f_cat_id
JOIN tab_search_index i
ON i.f_entry_id = e.id
JOIN tab_entries_status s
ON s.id = e.f_status_id
WHERE i.f_word = 'Suchbegriff'
Aber das wäre natürlich viel zu einfach so.
Ich hätte gerne die Suchergebnisse gruppiert nach Kategorien und pro Kategorie sollen die 2 am häufigsten aufgerufenen Einträge angezeigt werden. Schön wäre hier eine Lösung über "LIMIT", sodass ich die Anzahl der angezeigten Treffer (hier: 2) leicht verändert kann.
Zusätzlich soll die Anzahl aller Treffer zurückgegeben werden.
Später soll die Ausgabe so aussehen:
Code:
Kategorie 1:
- Treffer mit den häufigsten Aufrufen erledigt
- Treffer mit den zweithäufigsten Aufrufen nicht erledigt
Anzahl Treffer in der Kategorie insgesamt: 12
Kategorie 2:
- Treffer mit den häufigsten Aufrufen erledigt
- Treffer mit den zweithäufigsten Aufrufen erledigt
Anzahl Treffer in der Kategorie insgesamt: 25
...
Aktuell durchlaufe ich alle Kategorien und führe pro Kategorie zwei
SQL-Abfragen aus: Eine ermittelt mir die 2 am häufigsten angeklickten Einträge und die Andere über "COUNT(e.id)" die Anzahl der Treffer.
Beides zusammen in einer Abfrage lieferte bei mir nicht das gewünschte Ergebnis.
Das Ganze soll auch mit mehreren Suchbegriffen funktionieren, also mit
... WHERE i.f_word = 'Suchbegriff1' OR i.f_word = 'Suchbegriff2'
Von der Performance sollte das auch bei einigen tausend Einträge nicht zu langsam werden.
Ich könnte mir auch vorstellen, eine Abfrage zu haben und das Ergebnis per PHP zu zerlegen, falls das einfacher ist.
Gut wäre auch, wenn die Abfrage leicht auf andere
DBMS übertragen werden kann. Also nicht unbedingt
MySQL-spezifische Befehle enthält.
Habt ihr hierfür eine Idee/Lösung?
PS: Die Abfragen habe ich hier hinein getippt. Daher könnten diese evtl. Syntaxfehler enthalten.
Grüße
Matze