Volltextsuchergebnis nach Position der Trefferspalten sortieren? geht das?

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

  • Volltextsuchergebnis nach Position der Trefferspalten sortieren? geht das?

    Hallo liebe Leute,

    folgendes Problem:

    Ich habe eine umfangreiche Tabelle mit folgender Struktur:
    (Auszug aus der Tabelle, es handelt sich eigentlich um eine Tabelle mit 60.000 Einträgen und 30 Spalten)

    id | jahr | text1 | text2 | text3 | text4 | text5 | text6 | text7 | text8 | text9
    --------------------------------------------------------------------------------------------
    1 | 2003 |auto | sport | motor| media| welt | test | reise | tank | flug
    2 | 2001 | motor | auto | nett | media| welt | test | reise | tank | flug
    3 | 2003 | media | motor| nett | welt | test | reise | tank | flug

    Nun mache ich einen select:

    PHP-Code:
    SELECT FROM tabelle WHERE text1 LIKE '%$suchbegriff%' OR text2 LIKE '%$suchbegriff%' OR  text3 LIKE '%$suchbegriff%' OR  text4 LIKE '%$suchbegriff%' OR  text5 LIKE '%$suchbegriff%' OR  text6 LIKE '%$suchbegriff%' OR  text7 LIKE '%$suchbegriff%' OR  text8 LIKE '%$suchbegriff%' OR  text9 LIKE '%$suchbegriff%' OR  text10 LIKE '%$suchbegriff%' ORDER BY jahr
    Nun möchte ich das Suchergebnis bzw. die Ausgabe so sortieren lassen, dass zuerst nach dem Jahr und dann aber nach der Spaltenposition des Treffers sortiert wird.
    D.h. Wenn ich nach den string "motor" suche, dann möchte ich folgende Reihenfolge ausgeben:

    id 3
    id 1
    id 2

    Ich brauche also eigentlich einen Indexwert der angibt, in welcher Spalte (nummeriert) der string gefunden wurde.
    Gibt es dafür eine mysql Funktion/Befehl?
    Würde das über eine Temporäre Tabelle oder ein array gehen?
    Bitte bedenkt dabei, es handelt sich um ziemlich große Tabelle.

    Vielen Dank!

    Jogi
    Zuletzt geändert von JogiWebster; 27.08.2003, 16:12.

  • #2
    kurze zwischenfrage zu deinen spalten text1 ff.

    wozu sind diese genau?
    macht es evtl mehr sinn diese spalten, wenn es denn nur markierungen für rubriken/unterpunkte sind, was ich glaube, in eine separate tabelle zu setzen und diese mit hilfe einer verbindungstabelle mit deiner bisherigen zu verbinden?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Nein, wenn ich Dich richtig verstanden habe ;-) dann meine ich etwas anderes...

      Um das nochmal auf den Punkt zu bringen:

      Ich habe eine Tabelle mit ca. 60.000 Zeilen und ca. 30 Spalten, in den Spalten mit den Namen "text..." enzhalten alle Zellen einer Zeile unterschiedliche Informationen (Varchar).
      Allerdings kommt es vor, das z.B. in anderen Zeilen eben dieselbe Information auftaucht, wie schon in Zellen anderer Zeilen.

      Ich möchte ermitteln, in welcher Spalte der Zeilen der string gefunden wird und dann so sortieren, dass die Zeile, bei der der Begriff in der vordersten Spalte gefunden wird eben auch zuerst ausgegeben wird.

      War das verständlicher??

      Danke für Deine Mühe!

      Jogi

      Kommentar


      • #4
        Original geschrieben von JogiWebster
        War das verständlicher??
        naja. nicht wirklich.

        aber mit dem, was ich verstanden habe, wirst du es nicht ohne weiteres rausfinden, in welcher spalte was gefunden wurde. das geht zumindest nicht mit nur einer abfrage.

        du kannst also nur 30 queries an die db senden und immer nur in einer spalte abprüfen. aber ehrlich gesagt, halte ich das für performanceschädigend.

        was willst du überhaupt machen? macht es nicht doch sinn, mal die strukturen der tabellen zu checken, ob das überhaupt so sinn macht, wie du es macht? (nur als tipp)
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          ist wirklich schwierig zu beschreiben, ich versuchs nochmal...

          ich möchte eigentlich nur wissen, in welcher Spalte von 0-30 (von links nach rechts) der String in welcher Zeile gefunden wurde.
          Danach möchte ich einen Positionsindex von 1-10 (respektive "text1" - " text10") erstellen und danach sortieren.
          Ich möchte das also wie ein Schachbrett betrachten und heruasfinden ob A1 oder B2 oder A3...

          Ich wüßte nicht, wie ich die Tabellenstruktur optimieren könnte, weil der Suchbegriff ja komplett variabel ist... ??

          Hast Du noch eine andere IDee??


          Jogi

          Kommentar


          • #6
            Original geschrieben von JogiWebster
            Hast Du noch eine andere IDee??
            nö.. tut mir leid.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              ok, trotzdem danke!
              Vielleicht hat ja jemand anderes noch eine IDEE????

              Kommentar

              Lädt...
              X