AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Suchfunktion mit "Gruppierung"
Thema durchsuchen
Ansicht
Themen-Optionen

Suchfunktion mit "Gruppierung"

Ein Thema von Matze · begonnen am 5. Mär 2011 · letzter Beitrag vom 6. Mär 2011
 
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Suchfunktion mit "Gruppierung"

  Alt 5. Mär 2011, 07:53
Datenbank: MySQL • Version: 5.x • Zugriff über: PHP
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 = 'Suchbegriff1OR 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

Geändert von Matze ( 5. Mär 2011 um 09:06 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz