Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankabfrage mit automatischer Vor-Reihung für ältere Einträge

Einklappen

Neue Werbung 2019

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

  • Datenbankabfrage mit automatischer Vor-Reihung für ältere Einträge

    Hi Liebes PHP Forum,

    Ich stehe vor einem Problem bei dessen Lösung ich leider nicht weiterkomme.... (Habe es auch bereits "gegoogelt" aber nichts relevantes finden können ). Undzwar habe ich eine Suchfunktion geschrieben die mir die gefilterten Daten (Stellen-Inserate) aus der Datenbank holt und diese anzeigt. Derzeit werden die Ergebnisse absteigend nach Inserat-id sortiert. Das ist auch in Ordnung so, nur möchte ich, dass die Ergebnisse alle 2 Wochen einmalig "vorgereiht" werden.

    Hoffe das ich mein Problem möglichst verständlich schildern konnte und bedanke mich im Voraus für alle Antworten.

  • #2
    Zitat von NetRock Beitrag anzeigen
    alle 2 Wochen einmalig "vorgereiht" werden.
    Was?
    Ein mal alle 2 Wochen soll was geschehen?
    Und wozu überhaupt, willst du das? Ist die DB zu langsam?

    Ich stehe vor einem Problem
    jetzt stehen wir schon zu zweit.

    Kommentar


    • #3
      protestix Erstmals Danke für die rasche Antwort. Dadurch soll gewährleistet werden dass auch ältere Datenbankeinträge (in meinem Fall halt die Stelleninserate) angezeigt werden, und nicht am Ende des Suchergebnisses bleiben. Darauf trifft man auf Immobilienplattformen fast immer. Da z.b eine Immobilie über 6 Monate hinweg nicht verkauft wird und auf der Plattform beständig bleibt. Ohne Vorreihung würde das Inserat innerhalb z.B. 2 Monate auf die letzte Stelle fallen und dort auch bleiben.

      Kommentar


      • #4
        ja die Frage die ich mir jetzt stelle, nach welchen Kreterien? Du willst also alle 2 Wochen Ein Eintrag nach oben verschieben? Oder sollen alle Einträge, deren Einstellungsdatum in Wochen durch zwei Teilbar ist, oben in der Liste landen?

        Das was du dir vorgestellt hast ist noch nicht schlüssig. Ich verstehe was du vorhast, aber "alle 2 Wochen" damit kommst du nicht weiter. Also bei Alle zwei Wochen, muss man definieren ob das der Einstellungsdatum ist und dann was passiert wenn du 30 Einträge am gleichen Datum hast? Welcher von den soll dann als erstes angezeigt werden?

        Wie wärs wenn du das anders machst, beim Aufrufen des Inserats wird ein Besucher zähler hochgezählt. Und du sortierst die Beiträge nach "Am wenigsten besucht zu erst" somit landen die am besten besuchte Einträge auf der Letzten Seite.

        Du könntest dann die Zahl täglich um 0 Uhr zurücksetzen, so dass du jeden Tag eine andere Sortierung hast
        apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

        Kommentar


        • #5
          Das Problem hast du ja immer. Will heissen, niemand will den letzen Platz oder so weit hinten eingereiht sein, das er nicht mehr entdeckt wird.

          Wie willst du die Sortierung vornehmen und was passiert wenn aktuellere Einträge dann hinter den alten erscheinen, ist das dann kein Problem?

          Kommentar


          • #6
            protestix,BlackScorp

            Nochmals Danke für die Antworten! Eure Fragen haben mir bereits eine bessere Sicht über mein "Problem" verschafft.

            Ich möchte über das Einstellungsdatum sortieren und alle 14 Tage nach Einstellungsdatum das Inserat wieder (wie als wäre es neu Inseriert worden) an die erste Stelle in den Ergebnissen verschieben. Wenn zwischenzeitig neue Inserate reinkommen oder das nächste Inserat vorgereiht wird und somit das zuvor vorgereihte Inserat nicht an erster Stelle ist, ist es auch kein Problem. Es geht dabei nur darum, das dass Inserat wieder "vorne" in den Ergebnissen angezeigt wird (Die spezielle Platzierung ist dabei nicht relevant)

            Kommentar


            • #7
              Das Erstellungsdatum ist das Erstellungsdatum da wird nicht dran rummanipuliert.

              Du brauchst eine zusätzliche Spalte zum Sortieren und nur die änderst du.


              Kommentar


              • #8
                protestix also kann ich mir das (ganz grob) so vorstellen, dass ich einen Cron job schreibe der alle 24 Stunden die Eintrage der zusätzlich definierten Spalte ändert (z.B. einen Counter der täglich um 1 erhöht und wenn der Wert 15 erreicht ist auf 1 zurückgesetzt wird). Meine SQl Abfrage würde ich dann so gestalten das über beide Spalten sortiert wird (die zusätzliche Spalte sowie das Erstellungsdatum) oder kannst du mir eine bessere Vorgehensweise vorschlagen?

                Kommentar


                • #9
                  Kannst du so machen, oder Wochenweise, 0 1 2. Woche.

                  Kommentar


                  • #10
                    Ich würde dies glaube ich nicht über einen Zeitraum machen, sondern bei einem bestimmten Prozentsatz von Seitenaufrufen immer mal wieder die alten Einträge zuerst anzeigen.

                    Kommentar


                    • #11
                      Ich würde als Idee wie folgt vorgehen:
                      1. Festlegen wie viele alte Einträge vorangestellt werden sollen (=Anzahl)
                      2. Festlegen ab welchen Alters die Einträge als "alt" klassifiziert werden.
                      3. Alle alten Einträge selektieren, aus der Menge Anzahl Einträge zufällig auswählen und ausgeben
                      4. absteigend sortierte Einträge (ausgenommen den zufällig ausgewählten) ausgeben.

                      Kommentar


                      • #12
                        Zitat von jspit Beitrag anzeigen
                        Alle alten Einträge selektieren, aus der Menge Anzahl Einträge zufällig auswählen und ausgeben
                        Das führt zu springenden Ergebnisen. Klickst du ein Ergebnis an und gehst zurück, hast du andere Suchergebnisse. Das könnte ziemlich nervig sein.
                        Der Ansatz mit den überlaufenden Zähler klingt vernünftig.
                        Das könnte man im Prinzip auch direkt im Query machen: "ORDER BY (TO_DAYS(NOW()) - TO_DAYS(date_create)) % 14". Die Variante über ein extra Feld wäre performanter (Index) und würde ggf. auch noch eine Händige anpassung erlauben ("Premium Position"). Obs nun eine Rolle spielt, sei dahingestellt.

                        Kommentar


                        • #13
                          Damit es nicht zu "springenden Ergebnissen" kommt bietet sich an den Punkt 3 als Beispiel nur einmal am Tag zu machen und die id's zu speichern.
                          Die Sortierung kann dann recht einfach mit
                          Code:
                          .. ORDER BY id IN({id-liste}) DESC, Datum DESC
                          erfolgen. Damit kommen die Einträge dessen id in der Liste stehen automatisch nach vorne.

                          Kommentar


                          • #14
                            Danke an alle für die hilfreichen Antworten

                            Kommentar

                            Lädt...
                            X