Ankündigung

Einklappen
Keine Ankündigung bisher.

Ergebnisse nach Relevanz sortieren

Einklappen

Neue Werbung 2019

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

  • Ergebnisse nach Relevanz sortieren

    Hallo!

    Ich habe zwei Tabellen:

    Tabelle Photos:
    Code:
    photoID | photoTags      | photoFile
    -------------------------------------
    1       | tag1,tag2,tag3 | Foto-URL
    2       | tag1,tag2,tag3 | Foto-URL
    3       | tag1,tag2,tag3 | Foto-URL
    4       | tag1,tag2,tag3 | Foto-URL
    Und eine Tabelle photoRelevance:

    Code:
    rID | photoTag | photoID
    -------------------------
    1   | tag      | 1
    2   | tag      | 2
    3   | tag      | 5
    4   | tag      | 7
    In Tabelle 1 werden de hochgeladenen Fotos eingetragen, in Tabelle 2 wird eingetragen, welches Foto heruntergeladen wurde, nachdem nach besagtem Tag gesucht wurde.

    Tabelle 2, diente mir bis jetzt nur zur eigenen Übersicht, nach welchen Tags am häufigsten gesucht wird und welche Suchergebnisse (Fotos) zum jeweiligen Tag am beliebtesten sind.

    Nun möchte ich aber zur Verbesserung der Suchergebnisse, die Suchergebnisse nach der errechneten Relevanz sortieren lassen.

    Das heißt in dem Moment wo beim Suchvorgang die Bilder mittels

    Code:
    SELECT * FROM photos WHERE FIND_IN_SET(' . $tag . ', photoTags)
    abgefragt werden müsste eine zweite Abfrage stattfinden, die in Tabelle "photoRelevance" Spalte "photoTag" die Häufigkeit der gleichen Ergebnisse auslest, das sollte irgendwie so gehn:

    Code:
    SELECT COUNT(A), A, B 
    FROM Tabelle
    GROUP BY A
    und die Ergebnisse von der Such-Abfrage danach sortiert.

    Also ganz kurz zusammengefasst:

    Je öfter ein Bild, wenn z.B. nach dem Tag "Haus" gesucht wurde, heruntergeldane wurde, desto weiter oben soll es bei den Suchergebnissen sein.

  • #2
    Füg ne extra Spalte hinzu die du bei jeder Suche updatest und hochzählst, dann ist die Abfragen einfacher
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Müsste ich aber dann pro Tag machen, ein Bild hat ja mehrere Tags, wenn ich also nur eine Spalte Relevanz mache, dann gilt die für alle Tags.
      Das würde die Suchergebnisse verfälschen.

      Kommentar


      • #4
        Kannst du ein paar konkretere Beispielwerte + erwartetes Ergebnis posten?
        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

        Kommentar


        • #5
          Naja jemand sucht nach Haus und es sollen zuerst die Bilder mit dem Tag Haus angezeigt werden, die von anderen Usern die nach dem Tag Haus gesucht haben, anschließend auch heruntergeladen wurde.

          Sprich es ist 15 mal nach Haus gesucht worden und danach das Bild A heruntergeladen worden, 12 mal und danach das Bild D, 8 mal danach das Bild B, 2 mal Bild E. Dann soll ein User der das nächste mal nach Haus sucht die Bilder nach Relevanz absteigend angezeigt bekommen sprich in der Reihenfolge A, D, B, E

          Also du suchst etwas, dann findest du bei den Suchergebnissen ein Bild das dir gefällt, lädst es herunter und das wird dann vermerkt, dass du nach haus gesucht hast und dann das Bild A heruntergeladen hast.

          Nachdem es bei dem ganzen um eine Stockfoto Seite geht und die Bedürfnisse von Grafikern bzw. Webdesignern immer ähnlich sind, kann man so relativ gute Suchergebnisse erzielen.

          bis jetzt werden die Bilder nach Datum Angezeigt, also die Bilder die den Tag Haus enthalten und erst kürzlich hochgeladen wurden sind weiter oben, das is am Anfang egal, bei ca. 2000 Bilder pro Tag aber nicht mehr.

          Kommentar


          • #6
            Wenn du jetzt nicht mit Sets arbeiten würdest, hätte ich folgende Empfehlung:

            - Tabelle image (image_id, image_addedAt)
            - Tabelle tag (tag_id, tag_name, ...)
            - Tabelle image_tag (image_id, tag_id, search_count)
            - Tabelle search (search_id, search_value, ...)
            - Tabelle search_image (search_id, image_id)

            Btw., du kannst ja den Durchschnitt pro Tag errechnen, wenn du das "hinzugefügt am"-Datum für jedes Bild speicherst. Dann spielt es keine Rolle mehr, wann welches Bild hochgeladen wurde.
            [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

            Kommentar

            Lädt...
            X