T-Rex: Ähnliche Datensätze suchen

Moin,

hab da eine Datenbank mit Datensätze. Da gibt es unter anderem eine Tabelle für Rechnungen und eine Tabelle (Kindtabelle) mit Rechnungs-Positionen. Als Beispiel:
T-Rex kauft (Rechnungs)

  • 1 CPU Typ A (Rechnungsposition)
  • 2 Arbeitsspeicher Typ XY (Rechnungsposition)
  • 1 Gehäuse Typ A5 (Rechnungsposition)

Jetzt möchte ich "ähnliche" Rechnungen heraussuchen. Dabei sollen sagen wir mal min. 50 % der Rechnungspositionen übereinstimmen. Idealerweise kann man diese 50% als "Schalter" irgendwo im Quellcode angeben.
Gezeigt wird z.B. diese Rechnung von Gunnar:

  • 1 CPU Typ A
  • 2 Arbeitsspeicher Typ XY

Aber NICHT von Heinz:

  • 1 CPU Typ B
  • 2 Arbeitsspeicher Typ NIX

Frage:

  • Ist das mit MySQL eigentlich zu lösen oder komme ich um eine Scriptlösung nicht drum herum? Das würde ja bedeuten dass ich erstmal alle Rechnungen und Positionen in einer Schleife vergleichen muss?
  • Wenn es mit MySQL zu lösen ist, hab ich aktuell leider keinen Lösungsansatz.

Gruß
Dr. T-Rex

  1. Hallo!

    • Ist das mit MySQL eigentlich zu lösen oder komme ich um eine Scriptlösung nicht drum herum? Das würde ja bedeuten dass ich erstmal alle Rechnungen und Positionen in einer Schleife vergleichen muss?

    Du musst das "on-the-fly" erledigen. Also wenn Kunde A Artikel X in den Warenkorb wirft, fängst du mit der Prüfung an. Und nicht erst wenn alle Artikel im Warenkorb gelandet sind. Du kannst nämlich vorher nicht wissen wann der Bestellvorgang abgeschlossen wurde.

    Falls du das nach abgeschlossener Bestellung versuchen willst, fragst du erst den jeweiligen Warenkorb ab und bildest daraus eine Schnittmenge mit bereits vorhandenen Betellungen.

    Das musst du natürlich per Script erledigen.

    Beispiel:

    Kunde A:
    ArtikelNr.
    01
    02
    03

    Davon die gewünschte Schnittmenge, z.B. 02 und 03
    Die fragst du dann ab: "SELECT FROM Bestellungen WHERE ArtikelNr = 02 OR ArtikelNr = 03 GROUP BY user"

    Grüße, Matze

    1. Moin,

      erstmal danke für deine Gedanken.
      Wann ich die Abfrage mache ist ja erstmal egal.

      Verstehe ich das richtig, dass ich bei deinem Beispiel 3 SQL Befehle hab. Einmal guck ich nach 01, 02 - einmal nach 01, 03 und einmal nach 02, 03 ?
      Das ist ja dann Exponentiell ?
      Oder ich mach es mit einem "or". Dann spar ich zwar an SQL Befehlen, hätte dafür aber ein mega langes Ding (also im Sinne des Befehl :D).

      Gruß
      der mit dem mega langem
      T-Rex

      ...SQL Befehl (NATÜRLICH!!!)

  2. Tach!

    Jetzt möchte ich "ähnliche" Rechnungen heraussuchen. Dabei sollen sagen wir mal min. 50 % der Rechnungspositionen übereinstimmen.

    Du siehst ja schon, dass die Definition von "ähnlich" sehr variabel ist. Deswegen gibts da auch keine Ähnlichkeitssuche, abseits von auf englischer Aussprache beruhenden Stringvergleichen.

    • Ist das mit MySQL eigentlich zu lösen oder komme ich um eine Scriptlösung nicht drum herum?

    Prinzipiell kann man mit MySQL mehr oder weniger alle Probleme lösen, die mit Datenmengen zu tun haben: es gibt ja schließlich Stored Procedures.

    • Wenn es mit MySQL zu lösen ist, hab ich aktuell leider keinen Lösungsansatz.

    Finde (gruppiert natürlich) die Anzahl der Rechnungspositionen. Vergleiche in den Positionen mit einem Selfjoin, und nur für unterschiedliche Rechnungen, Anzahl mit Anzahl und Name mit Name und was auch immer. Die Anzahl der passenden Datensätze kannst du dann mit der Gesamtanzahl pro Gruppe vergleichen.

    dedlfix.