tester: MySQL: Top Begriffe von 2 Feldern

tag,
für ein infoportal will ich ein inhaltsverzeichnis erstellen, welches nach anfangsbuchstaben sortiert z.b. die 100 in artikeln (mysql->feld: kontent) am häufigsten vorkommenden begriffe auflisten.
nun hab ich wohl nur 2 möglichkeiten:
-irgendeine mysql funktion, die das kann, oder
-eine umfangreiche php funktion, die sehr viel speicher benötigt, da die betroffene mysql datenbank über 80 MB umfasst und davon größtenteils die kontent felder speicher benötigen
(daher bevorzuge ich variante 1)

auch im 1. fall ist es vermutlich erforderlich, das ergebnis zu cachen, oder?

Vielen dank für schnelle hilfe

  1. yo,

    kannst du ein wenig konketer werden, was genau du sortiert haben willst und wie dein tabellen-aufbau aussieht ? es kann nämlich gut sein, dass das mit den board-eigenen mitteln von mysql geht.

    Ilja

    1. beispiel:
      mysql-tabelle:
      kontent-feld[zeile1]:seltenes_wort oft häufig
      kontent-feld[zeile2]:irgendwas oft oft
      kontent-feld[zeile3]:oft häufig
      [viele mehr!]

      hierbei ist z.b. für den anfangsbuchtstabe O schonmal 'oft' unter den top 100 begriffen.

      da es viel mehr sind, ist das wohl ein etwas aufwändiger prozess, bei dem dann die am höufigsten vorkommenden begriffe ermittelt werden sollen.

      danke für hilfe

      1. yo,

        ich brauche immer ein wenig länger, mir das problem plastisch vorstellen zu können. aber ich befürchte, ich ahne was du machen willst.

        mal davon abgesehen, wie man das am besten realisiert, ist eine frage noch interessant, ob pro datensatz und kontent-feld ein wort nur einmal gezählt wird, egal wie oft es vorkommt oder sooft das entsprechende wort vorkommt. so könnte nämlich ein kontent feld ganz oben in der top liste erscheinen, obwohl es der einzige datensatz ist, der es beinhaltet.

        da es viel mehr sind, ist das wohl ein etwas aufwändiger prozess, bei dem dann die am höufigsten vorkommenden begriffe ermittelt werden sollen.

        das stelle ich mir nur sehr schwer zu realisieren vor. ausserhalb der datenbank würde ich das nicht machen, das dauert einfach zu lange. jedesmal wenn datensätze dazukommen, geändert werden oder gelöscht werden, kann sich ja auch die topliste ändern.

        es wäre von vorteil, wenn man eine extra tabelle hat, die alle vorhandenen wörter besitzt und deren anzahl. solange ich nichts ändert, kann man dann diese tabelle auslesen und die top 100 ermitteln. das solte sehr schnell gehen. die frage ist nur, was eben bei DML befehlen passiert. was mir einfällt, man könnte da vielleicht mit triggern arbeiten, die diese extra tabelle aktualisiert.

        Ilja

        1. Hallo Ilja,

          es wäre von vorteil, wenn man eine extra tabelle hat, die alle vorhandenen wörter besitzt und deren anzahl. solange ich nichts ändert, kann man dann diese tabelle auslesen und die top 100 ermitteln. das solte sehr schnell gehen. die frage ist nur, was eben bei DML befehlen passiert. was mir einfällt, man könnte da vielleicht mit triggern arbeiten, die diese extra tabelle aktualisiert.

          Trigger sind eine feine Sache. Immerhin gibt es in MySQL ab Version 5.0.2 eine rudimentäre Implementation von Triggern, siehe http://dev.mysql.com/doc/mysql/en/Triggers.html :-)

          Ich fürchte, die Verbreitung von MySQL >= 5.0.2 ist bei den Providern noch nicht allzu groß. Natürlich reicht es, wenn sie dem OP zur Verfügung steht.

          Freundliche Grüsse,

          Vinzenz

          1. yo,

            Ich fürchte, die Verbreitung von MySQL >= 5.0.2 ist bei den Providern noch nicht allzu groß. Natürlich reicht es, wenn sie dem OP zur Verfügung steht.

            wenn trigger noch nicht zur verfügung stehen, dann kann man das selbst auch per hand erledigen, zum beispiel wenn er DML befehle über PHP einfügt.

            Ilja

          2. Hi,

            Trigger sind eine feine Sache. Immerhin gibt es in MySQL ab Version 5.0.2 eine rudimentäre Implementation von Triggern, siehe http://dev.mysql.com/doc/mysql/en/Triggers.html :-)

            Trigger taugen mwie man so sagt
            1.) fuer alerts
            2.) zur Wahrung bestimmter Integritaeten, die anders nicht sichergestellt werden koennen

            Beispiele fuer 2 sind mir nicht bekannt. Das sollte der Datzenzugriff machen.

            Gruss,
            Ludger

            --
            "Der Markt will Trigger, der Markt bekommt Trigger."
            1. yo,

              Trigger taugen mwie man so sagt
              1.) fuer alerts
              2.) zur Wahrung bestimmter Integritaeten, die anders nicht sichergestellt werden koennen

              ganz sicher ist das nicht die aufgabe von triggern, sondern zum teil für constraints.

              Ilja

              1. Hi,

                Trigger taugen mwie man so sagt
                1.) fuer alerts
                2.) zur Wahrung bestimmter Integritaeten, die anders nicht sichergestellt werden koennen

                ganz sicher ist das nicht die aufgabe von triggern, sondern zum teil für constraints.

                1 wird ja wohl nicht angezweifelt und in 2 steht ja "anders nicht sichergestellt werden koennen".

                "ganz sicher"   ;-)

                Gruss,
                Ludger

                1. yo,

                  1 wird ja wohl nicht angezweifelt und in 2 steht ja "anders nicht sichergestellt werden koennen".

                  triggers sind im allgemeinen dazu da, bei bestimmten ereignissen eine gewünschte aktion auszuführen. und das hat erst mal nur bedingt mit deinen zwei punkten zu tun. ein dbms wird in aller regel für deine zwecke andere board-mittel zur verfügung stellen.

                  Ilja

                  1. Hi,

                    1 wird ja wohl nicht angezweifelt und in 2 steht ja "anders nicht sichergestellt werden koennen".
                    triggers sind im allgemeinen dazu da, bei bestimmten ereignissen eine gewünschte aktion auszuführen. und das hat erst mal nur bedingt mit deinen zwei punkten zu tun. ein dbms wird in aller regel für deine zwecke andere board-mittel zur verfügung stellen.

                    ist Dir die Bedeutung des Wortes
                     taugen
                    bekannt?

                    Trigger taugen mwie man so sagt
                    1.) fuer alerts
                    2.) zur Wahrung bestimmter Integritaeten, die anders nicht sichergestellt werden koennen

                    Das war meine Aussage (nur zur Erinnerung).

                    Gruss,
                    Ludger

                    1. yo,

                      ich denke mal, wir beide haben einfach eine unterschiedliche vorstellung, was trigger machen. so ist das halt manchmal...

                      Ilja

                      1. Hi,

                        ich denke mal, wir beide haben einfach eine unterschiedliche vorstellung, was trigger machen. so ist das halt manchmal...

                        so schlimm ist es zum Glueck nicht.

                        Es geht darum, dass Du beschreibst, was Trigger machen und ich beschreibe, wofuer Trigger taugen (Untermenge von dem was Trigger machen bzw. koennen).

                        Da ich stark vermute, dass Du aus Russland oder so kommst, habe ich auf das Wort 'taugen' aufmerksam gemacht, um die Kommunikation stabil zu halten.

                        ('machen oder koennen' != 'fuer etwas taugen')

                        Gruss,
                        Ludger

                        1. yo,

                          Da ich stark vermute, dass Du aus Russland oder so kommst, habe ich auf das Wort 'taugen' aufmerksam gemacht, um die Kommunikation stabil zu halten.

                          nun, wenn du sagst wofür sie taugen, willst du damit sicherlich auch sagen, dass alles andere nichts taugt. und so radikal würde ich das nicht betrachten. das bringt viel bewertung mit rein. wenn mich einer fragt, was trigger sind, würde ich das eben allgemeiner halten. und konsitenz ist im eigentlichen sinne auch nicht aufgabe von triggern.

                          wie auch immer, ich bin wasch-echter berliner und habe in russland auch keine verwandeten, nur eben einen russischen namen....

                          Ilja

                          1. Hi,

                            nun, wenn du sagst wofür sie taugen, willst du damit sicherlich auch sagen, dass alles andere nichts taugt. und so radikal würde ich das nicht betrachten. das bringt viel bewertung mit rein. wenn mich einer fragt, was trigger sind, würde ich das eben allgemeiner halten.

                            die Aussage 'Trigger sind eine feine Sache.' ist getroffen worden, so dass es mir angebracht schien auf Risiken beim Einsatz von Triggern aufmerksam zu machen.

                            und konsitenz ist im eigentlichen sinne auch nicht aufgabe von triggern.

                            Habe ich aber so gelernt. Trigger sollen Einstellungen implementieren, die anders nicht implementiert werden koennen. (Allerdings kann ich auch das nicht ganz nachvollziehen.)

                            wie auch immer, ich bin wasch-echter berliner und habe in russland auch keine verwandeten, nur eben einen russischen namen....

                            Gut. Schoene Stadt.

                            Gruss,
                            Ludger

  2. Ahoi

    für ein infoportal will ich ein inhaltsverzeichnis erstellen, welches nach anfangsbuchstaben sortiert z.b. die 100 in artikeln (mysql->feld: kontent) am häufigsten vorkommenden begriffe auflisten.

    da brauchst Du schon mal eine Stopwortliste, sonst bekommst Du da vermutlich den Titelsong einer bekannten Vorabendserie für Kinder ;-)

    So wie ich das verstanden habe benötigst Du also einen Index, ähnlich
     wie für eine "normale" "site search",  welcher zusätzlich die Häufigkeit der
    Begriffe auflistet.
    Dann möchtest Du daraus die TOP 100 als Verzeichnis erstellen.

    Und wie findet man dann die anderen Einträge welche da nicht gelistet werden?

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. »»Und wie findet man dann die anderen Einträge welche da nicht gelistet werden?
      man kann nicht alles auf einmal haben ;-)

      als stoplist will ich nur das kriterium festlegen, dass begriffe, die länger als 4 buchstaben sind verwendet werden.
      das sollte sich mit regex festlegen lassen, welcher -glaub ich- auch von mysql unterstützt wird.

      1. Hallo tester,

        als stoplist will ich nur das kriterium festlegen, dass begriffe, die länger als 4 buchstaben sind verwendet werden.

        Bist Du Dir ganz sicher, dass es nicht sehr viele Begriffe mit vier oder gar drei Buchstaben gibt, die sehr sinnvoll sind und aufgeführt werden sollten. Mir erscheint diese Einschränkung zu restriktiv. Ich kenne allerdings auch nicht den genauen Einsatzzweck. (Dein Beispiel unten spricht gegen Dich selbst :-))

        das sollte sich mit regex festlegen lassen, welcher -glaub ich- auch von mysql unterstützt wird.

        Bevor Du zu teuren regulären Ausdrücken greifst, verwende doch lieber die String-Funktionen, siehe http://dev.mysql.com/doc/mysql/en/String_functions.html.

        Freundliche Grüsse,

        Vinzenz