Announcement

Collapse
No announcement yet.

Gewichtung von suchergebnissen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Gewichtung von suchergebnissen

    Hallo alle zusammen,

    ich habe ein kleines Problem.


    Code:
    SELECT * FROM tabelle WHERE spalte1 like (%wort%) OR spalte2 like (%wort%) OR spalte3 like (%wort%) ORDER BY spalte1;

    Da ist schon viel schönes dran. Aber wie bekomme ich eine Gewichtung ohne FULLTEXT hin?

    Folgendes:
    spalte1 = Überschriften
    spalte2 = Text
    spalte3 = Kurztext


    Natürlich sollen erst alle überschriften angezeigt werden in denen "wort" vorkommt. Dann Text und dann Kurztext.


    Ich habe mir gedacht mit UNION ALL aber das ist nicht die Lösung die da so für hinhaut.


    Ich hoffe da hat wer eine knackige Idee für mich : )


    Grüße vom digi

  • #2
    Hallo digi,

    also mir fallen zwei Möglichkeiten ein, die eine wäre ein UNION und die zweite ein Case-Ausdruck im ORDER BY.
    [highlight=sql]
    SELECT tabelle.*, 1 ordering FROM tabelle WHERE spalte1 like (%wort%)
    UNION ALL
    SELECT tabelle.*, 2 ordering FROM tabelle WHERE spalte2 like (%wort%)
    UNION ALL
    SELECT tabelle.*, 3 ordering FROM tabelle WHERE spalte3 like (%wort%)
    ORDER BY ordering;
    [/highlight]

    [highlight=sql]
    SELECT *
    FROM tabelle
    WHERE spalte1 like (%wort%)
    OR spalte2 like (%wort%)
    OR spalte3 like (%wort%)
    ORDER BY CASE
    WHEN spalte1 LIKE '%wort%' THEN 1
    WHEN spalte2 LIKE '%wort%' THEN 2
    WHEN spalte3 LIKE '%wort%' THEN 2
    END;
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Extrem Cool! Ich kenn zwar die CASE anweisung von MySQL aber in der Doku steht nirgends (jedenfalls konnte ich nix finden), dass das auch mit Order by geht.

      Danke für den Denkanstoß


      Grüße vom digi

      Comment


      • #4
        Ich habs jetzt noch ein bisl umgebastelt. Sieht jetzt so aus:
        Code:
        SELECT spalte1, spalte2
        FROM bla
        WHERE spalte1 LIKE '%wort%' OR spalte2 LIKE '%wort%'
        ORDER BY (
         (CASE WHEN `spalte1` LIKE '%wort%' THEN 5 ELSE 0 END) +
         (CASE WHEN `spalte2` LIKE '%wort%' THEN 1 ELSE 0 END)) DESC;
        Bedeutet quasi das man seinen Suchergebnissen nach einem Punktesystem bewerten kann.

        Übersetzt: Wenn in Spalte 1 "wort" gefunden wird gib 5 Punkte Wenn in Spalte 2 "wort" ebenfalls gefunden wird addiere 1 Punkt hinzu (6 Punkte) usw. usw..

        Klappt echt wunderbar. Danke nochma weil auf die Idee mit CASE im Order by wär ich so nich gekomm ^^


        grüße

        Comment

        Working...
        X