christof: Like-Suche über mehrer Spalten und Sortierung

Hallo,

ich habe eine  Like-mySQL Abfrage über mehrere Spalten. das ist kein Problem. aber ich möchte gerne, dass das Ergebnis so sortiert ist, das die die datensätze zuerst angezeigt werden, die in der ersten Spalte gefunden wurden, dann die, in der der Suchbegriff in der 2. Spalte gefunden wurde etc.....

Beispiel

------------------
|Gel       |Toll |
|Heise     |Nagel|
|Gelomythol|Nix  |
......

Der suchbegriff ist %Gel%.
ich erwarte folgende ausgabe:

Gel
Gelomythol
Nagel

ist sowas möglich?

Mfg
Christof

  1. Hallo,

    was spricht dagegen, zwei Abfragen hintereinander zu machen?
    Erst:
    SELECT spalte1 FROM tabelle WHERE spalte1 LIKE "%GEL%"
    und dann
    SELECT spalte2 FROM tabelle WHERE spalte1 NOT LIKE "%GEL%"

    Gruß
      Michael

    1. Danke für deine Antort.
      Ich habe aber dann das Problem dass ich zwei
      abfragen machen muss

      $result1=mysql_query($sql1);
      $result2=mysql_query($sql2);

      Kann ich die beiden $results zusammenfassen zu einem? Das wäre wichtig, da dieses oftmal noch verwendet werden muss....

      Danke Christof

  2. yo,

    aber ich möchte gerne, dass das Ergebnis so sortiert ist, das die die datensätze zuerst angezeigt werden, die in der ersten Spalte gefunden wurden, dann die, in der der Suchbegriff in der 2. Spalte gefunden wurde etc.....

    UNION kann mehrere abfragen zu einer zusammenführen, wobei dabei die anzahl der spalten gleich sein muss. bin mir im moment nicht ganz sicher, wie die sortierung dabei aussieht, aber es könnte sein, dass er die ergebnise der einzellabfragen einfach "zusammen klascht". damit hättest du deine gewünschte reihenfolge. versuch es einfach mal.

    Ilja

    1. yo,

      kleiner nachtrag, eventuell UNION ALL benutzen...

      Ilja

      1. Besten Dank Ilja.
        Es funktioniert auch.... Aber ich habe das PRoblem, dass ich die Ergebniss über mehrere Seiten darstellen möchte. Also ich habe dafür ein LIMI benutzt. Aber wie setze ich dass denn dann ein.
        Denn so, wie ich es jetzt habe funktioniert es leider nicht.

        Die Abfrage sieht so aus:

        $sql="SELECT * FROM ".$arTable." where desc1 like "%".$desc."%" LIMI ".$offset.",".$lines."
          UNION
        SELECT * FROM ".$arTable." where concat(artno,desc2ger) like "%".$desc."%" limit ".$offset.",".$lines;break;

        Danke für deine Hilfe....

        Mfg
        Christof

        1. yo,

          Denn so, wie ich es jetzt habe funktioniert es leider nicht.

          es wäre immer ganz gut zu wissen, was genau den passiert und was genau du haben willst.

          Ilja

          1. Also das Problem ist folgendes.
            Ich führe eine Volltextsuche über eine Datenbank durch über 3 verschiedene Spalten.
            Die Ausgabe soll aber so sortiert sein, dass die in Datensätze, die in der 1. Spalte gefunden als erstes angezeigt werden.
            Ok, das funktioniert mit dem Union befehl.
            Aber das Problem ist jetzt, dass die Ergebnisse "zerteilt" angezeigt werden sollen. (auf der 1. Seite die ersten 30 auf der 2. Seiten 30-60 etc)
            Um die Anzahl der Seiten zu berechnen, lese ich mit mysql_num_rows($sql) die Anzahl der ergebnisse aus und teile Sie durch die Datensätze pro Seite.
            Das Problem ist aber, dass ich jetzt bei der SQL abfrage doppelte Datensätze bekomme....
            Also müsste ich der SQL datenbank sagen, dass wenn in einem Datensatz das Suchwort gefunden wurde, dieser Datensatz nicht mehr durchsucht werden muss....
            Gibt's da ne möglichkeit für?

            Ich hoffe, ihr konntet es verstehen....

            MfG
            Christof

            1. yo,

              Aber das Problem ist jetzt, dass die Ergebnisse "zerteilt" angezeigt werden sollen. (auf der 1. Seite die ersten 30 auf der 2. Seiten 30-60 etc)

              hmm, einen union befehl auf eine gewisse anzahl zu begrenzen. so out of the head, muss ich passen, aber mal überlegen. deine ausgangsüberlegung war ja, nur eine sql abfrage zu machen. limit würde genau das ja wieder aushebeln, da man pro seite eine machen muss. insofern ist mir der gewinn noch nicht klar. erst willst du alles in einer abfrage haben, nun wieder begrentzen. benutzt du php auf der server seite ?

              Das Problem ist aber, dass ich jetzt bei der SQL abfrage doppelte

              Datensätze bekomme....

              nicht mit UNION, das sortiert doppelte datensätze raus, hat sozusagen ein "auto distinct". du meinst mit doppelten datensätze, die auf der einen seite angezeigt werden, werden auf dernächsten ebenfalls angezeigt ?

              Also müsste ich der SQL datenbank sagen, dass wenn in einem Datensatz das Suchwort gefunden wurde, dieser Datensatz nicht mehr durchsucht werden muss....

              dann musst du das suchwort mit auf die nächste seite übertragen und entsprechnd die abfrage bilden oder aber den wert der limit abfragen mit übertragen und entsprechend bei jeder neuen seite erhöhen.

              Gibt's da ne möglichkeit für?

              immer, man muss sie nur finden ;-)

              Ich hoffe, ihr konntet es verstehen....

              noch nciht so ganz....

              Ilja

              1. Danke Ilja,
                ich habe nur 2 Klammern in der Abfrage falsch gesetzt gehabt.
                Das ergebnis ist unter http://www.catherine.de/shop/frame_shop.html zu sehen!!!
                Vielen Dank für Deine Hilfe
                Christof

                1. yo,

                  ich habe nur 2 Klammern in der Abfrage falsch gesetzt gehabt.

                  kleine ursachen haben leider manchmal eine grosse wirkung. deine seite finde ich übringens sehr gelungen, bis auf die buttons im menü. das kann aber daran liegen, dass ich ein typischer vertreter der gattung mann bin.... ;-)

                  Ilja