Werte vergleichen, ähnlichkeit prüfen - dann gruppieren

ev0lst

Erfahrenes Mitglied
Hallo zusammen,

ich habe ein Problem welches ich nicht lösen kann. Ich habe eine Datenbank mit mehreren Datensätzen. Diese Einträge ähneln sich im Titel und sollten bei bestimmter Ähnlichkeit gruppiert werden.

Ein Beispiel für die Daten (die ausgelesen werden sollen):

PlayStation 3 - 80GB
PlayStation 3 - 120GB

Hierbei ist zu erkennen, dass es eine Ähnlichkeit beim ersten Teil des titels gibt, nämlich "PlayStation 3" - da es in der Datenbank aber auch (z.B.) eine XBox 360 geben kann, kann ich nicht nur nach einem Suchwort wie "PlayStation 3" suchen.

Wie kann ich eine solche Gruppierung am besten aufschlüsseln? Es wäre auch eine Lösung via MySQL möglich, falls es einfacher ist. Nur brauche ich hierzu einen Ansatz, denn ich stecke extrem fest.

Ich hoffe mir kann jemand helfen.

Danke!
 
Ich verstehe deine Frage nicht so ganz.
Wenn ich "Playstation 3" in das Suchfeld eingebe, soll auch "XBox 360" gefunden werden? Wie sieht deine Tabelle/deine Tabellen überhaupt aus. Ohne näheres ist es schwierig dir hier eine befriedigende Antwort zu geben.
 
Danke für die schnellen Antworten.

@timestamp:
Es geht darum, ich habe eine Datenbank mit fast 1000 Datensätzen. Hier ist es das Ziel, dass ich Einträge dessen Titel sich ähnelt, in einer Gruppierung ausgegeben werden. Es hat nichts mit XBox 360 zutun, außer der Tatsache, dass XBox 360 definitiv einer anderen Gruppe als PlayStation 3 angehört.

Ich benötige nur dieses ausfiltern der Titel, andere Daten zu diesem Datensatz kann ich dann ja entsprechend auslesen.

@yaslaw:
Habe ich zuerst auch gedacht, aber ich glaube das funktioniert nur bedingt gut - habe es aber auch nicht getestet.

Ich hatte schon überlegt alle Einträge durchzugeben und dann Schritt für Schritt die Buchstaben durchzugeben, bis es eine Differenz gibt. Aber das scheint viel Performence zu kosten.
 
Ist es machbar, dass Du den Titel noch einmal normalisierst? Dann würde die MySQL-Abfrage gelingen, was die Sache um einige Faktoren performanter macht, als ein perBuchstabenvergleich. Sind alle Einträge grob in der Form XXX - YYY ? Um einen guten Code zu schreiben, wäre es auch gut zu wissen, ob die Einträge "so ziemlich gleich" sind oder ob dort auch "Gurken 2kg" gegen "4 Winterreifen" gecheckt werden.

mfg chmee
 
Leider gibt es viele verschiedene Namen (Titel) in der Datenbank. Habe es schon versucht mit folgendem Ansatz:

Code:
SELECT name FROM artikel
    WHERE MATCH (name)
   AGAINST ('.$string.')

Hierbei wäre das $string mit "PlayStation 3" versehen. Ich erhalte auch alle Artikel die damit anfangen, aber eben jetzt fehlt mir der "nächste Schritt", damit es weitergeht. Bin auch auf diesen Link gestoßen: http://dev.mysql.com/doc/refman/5.1/de/fulltext-query-expansion.html
 
Hmm. Diese Art der Suche/Zusammenfassung bedingt aber, dass Du weisst, was Du suchst ($string). Und sowas könnte man auch mit UPPER(Name) LIKE UPPER($stringB) anstellen. Wenn Du eine undefinierte Gruppierung machen willst, dann würd ich fast auf ein assoziatives Array aller Einträge ausweichen in Form eines Baumes - getrennt durch Spaces.

zB die zwei Einträge
Playstation 3 - 120GB
Playstation 3 - 80GB

würden so aussehen
Code:
$array['Playstation']=(
  ['3']=(
            ['80GB']=>'1',
            ['120GB']=>'1')
           )
);
Damit könntest Du jede nicht genauer bekannte Tabelle aufsplitten und am Ende die erste 'Ebene'(Assoziativname) nach der ersten Gruppierung abfragen etcpp..

mfg chmee (p.s.: fehler sind erlaubt, ich hab das grad nur hingeschmiert und muß sofort ins Bett :D)
 
Ja das würde gehen. Nur am Ende muss ich entsprechend wissen was was ist. Um es vielleicht noch etwas deutlicher zu sagen: Es geht darum dass Einträge vorher "ein Eintrag" war mit Eigenschaften (XX GB) - Nun ist es so dass das ganze einen Stammartikel sein soll und entsprechend die GB Größe eine Eigenschaft ist.

PlayStation 3
- 80 GB
- 120 GB
...

Dann gute Nacht ;) Danke für Deine Hilfe!
 
Dann wird anstatt des Zählers die Tabellen-id gespeichert (wieder ein Array, weil es auf mehrere zutreffen könnte), somit ist die Eindeutigkeit und Verkettung mit der MySQL-Tabelle gewahrt.

mfg chmee
 
Meinst Du, du kannst mir da mal einen Beispielcode zaubern? Stehe gerade etwas auf dem Schlauch... Echt mieses Thema, ich stecke dermaßen fest.
 
Zurück