[PHP] Passender Algorithmus zu Auswahlproblem mit 4 Abhängigkeiten

Dieses Thema im Forum "Webentwicklung" wurde erstellt von GaYlORd, 7. November 2014 .

  1. 7. November 2014
    Hi Leute,

    stehe vor einem Problem:
    Ich habe in der Datenbank Elemente (150 Stück) mit 4 Eigenschaften.
    Der Nutzer muss einen ca. Wert für diese Eigenschaften definieren (Abweichung je nach Eigenschaft von +/- 5%).

    Wenn der Nutzer das getan hat, sollen passende Elemente ausgewählt werden (ein Element kann öfter ausgewählt werden - max. Zahl eines einzelnen Elements ist ebenfalls in der Datenbank), die aufsummiert den Gesamtwert (inkl. 5% Toleranzbereich) nicht übersteigen und am Ende sollen eine Liste mit der passende Empfehlung ausgegeben werden.

    Der Nutzer kann gerne 10 Sekunden oder mehr warten bis ein Ergebnis geliefert wird. Ich muss ja alle Elemente miteinander vergleichen, um die sinnvollste Kombination auszuwählen.
    Erstmal Optional: Das ganze muss 7mal 3mal durchlaufen für früh, mittag, abend und montag bis sonntag. Dabei soll aber nicht 2mal an verschiedenen Tagen oder an einem Tag zu anderer Zeit das selbe ausgewählt werden dürfen (bzw. ist das auch festgelegt).

    Jetzt meine Frage: Wie gehe ich da im sinnvollsten vor? Welcher Algorithmus ist für das Problem am besten geeignet (schön wäre mit Toleranzbereich)?
    Einfach in ein Array packen und durchschleifen und mit if else vergleichen wird wohl zu lange dauern Hat jemand eine intelligente Lösung dazu?


    Danke!
    Schöne Grüße
    gl
     
  2. 7. November 2014
    AW:
    PHP:
     Passender Algorithmus zu Auswahlproblem mit 4 Abhängigkeiten [/ b ]

    Toleranzbereich kannst du mit der Funktion BETWEEN angeben .

    [
    code ] SELECT 
    FROM tbl 
    WHERE 
      foo BETWEEN min 
    AND  max [/ code ]

    min und max solltest du mit einer simplen Prozentrechnung ausrechnen können .
    Wenn PHP als Vermittler dient kannst du bereits vorab ausrechnen oder andernfalls im SQL - Query .

    [
    code ] min  wert  wert  .05 
    max 
    wert  wert  .05 [/ code

    Welche Einträge bereits angezeigt wurden kannst du mit einem Zeitstempel abfragen .
    Mit dem lässt sich ermitteln ob und zu welcher Uhrzeit der Eintrag zuletzt angezeigt wurde .

    [
    code ]AND  timestmp  NOW () -  INTERVAL 7 DAYS [/ code ]

    Wie genau du das brauchst kannst du selbst nachlesen unter :
    [
    url = "http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html" ] MySQL  ::    MySQL 5.5 Reference Manual  ::  12.7 Date  and  Time Functions [/ url ]

    Die 
    Abfrage an sich wird nicht mehr als ein paar Millisekunden dauern  ;)
     
  3. 7. November 2014
    AW:
    PHP:
     Passender Algorithmus zu Auswahlproblem mit 4 Abhängigkeiten [/ b ]

    Hi Murdoc ,

    so simpel ist es dann leider doch nicht oder ich mach es mir einfach zu kompliziert  ;)
    Wie gesagt ich muss  die  verschiedenen Elemente kombinieren können .

    Ich machs mal mit einem Beispiel :
    Das ganze soll ein Vorschlag für einen Ernährungsplan  ( früh mittag und abend für 7 Tage werden
    Kunde gibt seine Daten ein und ich habe  die  Werte als Tagesbedarf :
    Eiweiß 184 g
    Kohlenhydrat
    50 - 100 g
    Fett
    68 g
    2230kcal

    In der Datenbank stehen 150 Nahrungsmittel mit den Werten pro 100g

    Z . b .: 
    Produkt  kcal  eiweiß  kohlenhydrat  fett
    Lachs 
    65  15  0.5 

    Natürlich kann jemand 200g Lachs essen 
    ->  2mal Allerdings soll eben noch alles weitere so weit wie möglich aufgefüllt werden

    Hoffe jetzt wird eher klar was ich vor habe .

    Schöne Grüße
    gl
     
  4. 7. November 2014
    AW:
    PHP:
     Passender Algorithmus zu Auswahlproblem mit 4 Abhängigkeiten [/ b ]

    Okay ob sich das mit einem Query alleine lösen lässt weiß ich gerade nicht .
    Datum der letzen Anzeige usw sollte sich dennoch so wie oben beschrieben lösen lassen .

    Zusätzlich kannst ja noch ein ORDER BY RAND ()  einbauen .

    Um  die  Liste dann zu berechnen wird wohl ein Trial & Error Algorithmus herhalten müssen 
    [ code ]if  eiweiß_summe_aktuell  eiweiß_summe_eintrag  <=  eiweiß_summe_des_kunden
      eintrag_mit_in_liste_aufnehmen
    ()
    else 
      
    nächsten_eintrag_testen ()[/ code ]
    Auf Anhieb fällt mir nix anderes ein lasse mich aber liebend gern eines besseren belehren .

    Vielleicht macht es auch noch Sinn  die  Einträge zu kategorisieren  ( hat viel Eiweiß und wenig Fett usw ...)  und zu sortieren  ( in PHP damit du beim erstellen der Liste noch prüfen kannst ob es sinnvoll ist was hinzuzufügen wenn man was anderes wegnimmt  ...
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.