[MySQL 4.1] Auslesen nach Häufigkeit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.1] Auslesen nach Häufigkeit

    Hallo!

    Bin neu hier! Habe eine Frage zur Realisierung der folgenden Funktion:

    Ich habe eine Tabelle 1, wo verschiedene Datensätze gespeichert sind. Dort gibt es eine Spalte Häufigkeit, die den Wert 1-100 zugewiesen bekommt.

    Jetzt möchte ich zu bestimmten Zeiten via Cron-Job Daten aus dieser Tabelle auslesen um diese in eine Tabelle 2 einzufügen. Das Problem hierbei: Ich möchte nach der Häufigkeit diese Einträge in Tabelle 2 einfügen. Sprich: hat in Tabelle 1 ein Datensatz die Häufigkeit 100, so muß er 10x häufiger generiert werden als ein Datensatz mit der Häufigkeit 10. Order by rand() limit 1 fällt somit leider weg.

    Ich habe schon versucht in Tabelle 1 einen Zähler einzubauen, wie oft ein Datensatz bereits benutzt wurde, um beim Erreichen der Häufigkeit ein erneutes Eintragen zu verhindern, jedoch generiert er dann seltene Einträge mit der Häufigkeit 5 zu Beginn, wobei somit zum Schluss nur noch häufige Einträge generiert werden, bis auch diese den Zählerwert der Häufigkeit erreicht haben.

    Hat jemand eine Idee dies so zu verwirklichen, dass o.g. nicht passiert?

    Grüße aus dem schönen Odenwald,

    Alex

  • #2
    Kannst du das bitte nochmal genauer erklären? Ich habs leider nicht verstanden.

    Du hast also eine Spalte "Häufigkeit", die den Wert 1-100 hat. Jetzt willst du - egal wann - alle Datensätze auslesen und diese in eine 2. Tabelle eintragen. Datensätze mit der Häufigkeit 50 sollen dann also 50x eingetragen werden, Datensätze mit Häufigkeit 3 nur 3x usw.
    Richtig?


    Mir macht das hier jetzt noch Probleme:

    Ich habe schon versucht in Tabelle 1 einen Zähler einzubauen, wie oft ein Datensatz bereits benutzt wurde, um beim Erreichen der Häufigkeit ein erneutes Eintragen zu verhindern, jedoch generiert er dann seltene Einträge mit der Häufigkeit 5 zu Beginn, wobei somit zum Schluss nur noch häufige Einträge generiert werden, bis auch diese den Zählerwert der Häufigkeit erreicht haben.
    Erreichen der Häufigkeit...? Also wenn ich schon 3x eingetragen habe ist Ende? Was ist wo Ende und wieso schreibt er dann die Einträge mit kleiner Häufigkeit zuerst?



    Vielleicht ein paar Ideen:

    - INSERT ... SELECT Syntax?
    - Daten holen, Schleife, INSERT-Query als String aufbauen mit "Extended Insert"-Syntax (viele Einträge über einen INSERT erzeugen) und ggf. (bei Häufigkeit) in der Schleife nochmal loopen?
    - ggf. irgendwie vorher durchmischen (falls das gebraucht wird?), beispielsweise einfach durch ORDER BY RAND() (ohne das limit)



    Aber ich glaube, du erklärst es nochmal und gibst ein paar weitere Infos, weil so ist das einfach nen Ratespiel.
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Danke für Deine Antwort. Was Du verstanden hast ist nicht ganz richtig... habe mich wohl falsch ausgedrückt.

      1. Ich habe eine Tabelle mit Datensätzen (ca. 100 Stück an der Zahl). Nennen wir sie Quelle

      2. Ich habe eine (noch) leere Tabelle2, wo immer 4-5 Einträge aus Quelle drinstehen sollen.

      Erst wenn diese 4-5 Einträge aus Tabelle 2 durch (teilweise tagelangen Ereignissen anderer Scripte) erledigt sind werden diese gelöscht und dafür sollen wieder 4-5 neue Einträge aus Quelle eingelesen werden. Da es in Quelle einige Einträge gibt, die nicht so häufig in Tabelle2 geschrieben werden sollen wie andere muss ich irgendwie eine Spalte in Quelle einfügen, die die Häufigkeit der Generierung managt. Diese Spalte habe ich Häufigkeit getauft.

      Nehmen wir mal an es würden nur 3 Datensätze in Quelle stehen:

      1. Eintrag Häufigkeit 100
      2. Eintrag Häufigkeit 60
      3. Eintrag Häufigkeit 20

      Jetzt sollen quasi bei 180 Eintragungen 100x Eintrag 1, 60x Eintrag 2 und 20x Eintrag 3 in Tabelle 2 kopiert werden. Jedoch nicht alle auf einmal (das wäre leicht zu realisieren), sondern im Laufe von ca. 2 Monaten. Es dürfen immer nur 4-5 Datensätze in Tabelle 2 gleichzeitig drinnenstehen, bis sie abgearbeitet wurden. Erst dann werden neue nach o.g. Regel erzeugt.
      Zuletzt geändert von AlexL1980; 03.03.2007, 00:08.

      Kommentar

      Lädt...
      X