Gewichtung in SQL-Abfrage

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

  • Gewichtung in SQL-Abfrage

    hallo,

    mein Problem ist folgendes:

    in meiner DB sind folgende Tabellen:
    keyword:
    k_id | k_keyword
    descr:
    d_id | d_descr
    forkey:
    f_id
    f_kid_nr (=keyword.k_id)
    f_did_nr (=descr.d_id)

    PHP-Code:
    SQL-Anweisung
    select k_keyword
    d_descr from forkey LEFT JOIN keyword ON (k_id f_kid_nr)
    LEFT JOIN descr ON (d_id f_did_nr
    where k_keyword like "%userinput%" or d_descr like "%userinput%"
    group by k_keyword order by k_keyword asc 
    soweit funktioniert es auch.
    Nun sollte die Sortierung aber so aussehen, daß zwar grundsätzlich schon nach k_keyword sortiert wird,
    aber zuerst die Treffer, die aus der keyword Tabelle stammen und dann erst jene aus der descr Tabelle
    (verständlich ?)

    Anmerkung:
    die Zusammenführung in eine Tabelle ist nicht möglich, da keyword-descr Beziehung 1:n ist
    MySQL version: 3.23.58

    ist das mit einer einzigen SQL-Anweisung machbar ?
    wäre für jeden Ansatz dankbar

  • #2
    Re: Gewichtung in SQL-Abfrage

    da würde ich mir noch ein IF reinbasteln, welches 1 liefert wenn der treffer in der keyword-tabelle war, und 0 wenn er in der description-tabelle war - und halt anschließend diese neue spalte als zusätzliches sortierkriterium angeben.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      order by k_keyword asc, k_keyword like "%userinput%" DESC

      so?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        @mrhappines:

        so einfach ganz gehen
        das scheint zu funktionieren, hab in der DB derzeit nur wenige Datensätze
        muß also noch genauer austesten


        @wahsaga

        habs mit deinem Vorschlag auch probiert
        PHP-Code:
        select k_keywordd_descr,
        IF ( 
        k_keyword LIKE  '%userinput%'0) AS ordone,
        IF (
        d_descr LIKE  '%userinput%'0) AS ordtwo
        from forkey LEFT JOIN keyword ON 
        (k_id f_kid_nr)
        LEFT JOIN descr ON (d_id f_did_nr
        where k_keyword like "%userinput%" or d_descr like "%userinput%"
        group by k_keyword order by k_keyword asc 
        dabei hat er aber das erste IF nicht berücksichtigt stand immer 0 in der Ausgabe
        hab auch probiert bei beiden alias "ord" anzugeben schreibt trotzdem 2 Spalten
        ich bin davon ausgegangen, daß ich es vor die FROM Anweisung schreiben muß,
        da ich nachher ja keinen alias mehr definieren kann (stimmt das ?)
        den ich aber dann zum sortieren bräuchte

        Kommentar


        • #5
          ich denke mal, wahsaga hat das gleiche gemeint wie ich

          ob ich jetzt
          Code:
          IF (k_keyword LIKE  '%userinput%', 0, 1) AS ordone
          und
          Code:
          ORDER BY ..., ordone
          mache o der so wie ich kommt auf's selbe raus
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar

          Lädt...
          X