Sortierproblem! Trefferindex? Temporäre Spalten?

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

  • Sortierproblem! Trefferindex? Temporäre Spalten?

    Hallo!

    Ich habe ähnliches Problem hier schonmal dargestellt, aber so richtig hat es niemand verstanden, bzw. niemand hatte eine Lösung, deshalb probiere ich es voller Hoffnung nochmal etwas anders...

    Eine Tabelle mit vielen VARCHAR Spalten wird mit LIKE '%$suchbegriff%' volltext durchsucht.

    Es treten viele Treffer in unterschiedlichen Zeilen und unterschiedlichen Spalten auf.

    Nun möchte ich so sortieren, dass die id`s bzw. Zeilen, in denen der Treffer, von links gesehen in der vordersten Spalte (also Feldindex "0") in der Ausgabe zuerts auftaucht, auch wenn die ID sehr weit unten in der Tabelle liegt.
    Das ganze soll dann weiter nach dem Feldindex (von "0" bis "10") sortiert werden.

    Wegen der Performance möchte ich das eigentlich ohne weitere Arrays ausführen, ich dachte eher an eine Sucheingrenzung in dem SELECT (evtl. mit "SELECT AS" ? und temporären Spalten?), zur Not ist mir aber "fast jede Variante recht"

    Ich würde mich sehr über hilfreiche Tipps freuen!!

    Euer Jogi

  • #2
    das ist sql! *VERSCHIEB*

    aber ich habe dich dennoch nicht verstanden..
    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
      sorry, sollte auch in den sql bereich...
      ich glaube aber irgendjemand wird mich hier doch verstehen oder???
      ich kann mir auch nicht vorstellen, das niemand ein ähnliches problem hat...
      also probierts doch einfach mal ;-)

      Kommentar


      • #4
        Re: Sortierproblem! Trefferindex? Temporäre Spalten?

        Original geschrieben von JogiWebster

        Wegen der Performance möchte ich das eigentlich ohne weitere Arrays ausführen, ich dachte eher an eine Sucheingrenzung in dem SELECT (evtl. mit "SELECT AS" ? und temporären Spalten?), zur Not ist mir aber "fast jede Variante recht"
        naja, also was viel schnelleres als arrays gibts wohl nich.

        obs nun mit ner sql abfrage schneller geht musst du probieren, aber ohne array, fällt mir nichts weiter ein, als jede spalte extra abzufragen.


        edit:
        doch mir fällt noch was ein ..
        ein elend lange
        select CASE WHEN xx LIKE '%sss% THEN xx WHEN yy LIKE ..... END
        Zuletzt geändert von graf; 02.09.2003, 22:27.

        Kommentar


        • #5
          also Du meinst das in dem SELECT abzufragen dauert zu lange?
          meinst Du denn es würde wirklich funktionieren mit den Bedingungen im SELECT?
          Hättest Du einen Tip, wie ich die ARRAYS aufbauen bzw. abfragen sollte?

          Danke Dir! Wusste ich doch, dass mich jemand versteht

          Kommentar


          • #6
            Original geschrieben von JogiWebster
            meinst Du denn es würde wirklich funktionieren mit den Bedingungen im SELECT?

            ja sicher

            Hättest Du einen Tip, wie ich die ARRAYS aufbauen bzw. abfragen sollte?

            PHP-Code:
            while($x=mysql_fetch_array(..)) {
              foreach (
            $x as $key=>$val) { 
                 if(
            strpos("suchtext"$val0)) $array[$key][] = $val;
              }
            }

            asort($array);
            foreach (
            $array as $key=>$val) { 
             echo 
            "Spalte: ".$key." | Text: ".$val

            Kommentar


            • #7
              erstmal Danke für Deine Anregung!

              Nur habe ich noch so meine Verständnisprobleme mit Arrays und leider gibt das auch eine Menge errors (siehe Kommentare):


              PHP-Code:
              while($x=mysql_fetch_array($result)) {
                foreach (
              $x as $key=>$val) { 
                   if(
              strpos("$suchbegriff"$val0)) $array[$key][] = $val;    //Empty Delimiter
                
              }
              }

              asort($array);    // asort() expects parameter 1 to be array, null given 
              foreach ($array as $key=>$val) {    // Invalid argument supplied for foreach()
               
              echo "Spalte: ".$key." | Text: ".$val;

              Wäre super, wenn Du mir noch eine kurze Erläuterung zu den Funktionen geben könntest, bzw. sagen, warum die errors kommen?

              Vielen Dank!

              Kommentar


              • #8
                PHP-Code:
                $array = array(); // mach das mal noch, damit kein fehler kommt, wenn nichts gefunden wurde
                while($x=mysql_fetch_array($result)) {
                  foreach (
                $x as $key=>$val) { 
                     if(
                strpos($suchbegriff$val0)) $array[$key][] = $val;    
                    
                /*Du suchst    nicht nach dem String $suchbegriff, sondern nach dem
                      Inhalt in $suchbegriff
                      Wenn $suchbegriff in $val, gefunden wurde, wird dem Array 
                      $array[$key] (also bspw. $array["spalte1"]) ein Element hinzugefügt
                    */
                 
                }
                }

                asort($array);    // sortiert das array, nach den schlüsselwerten, als erst "spalte1", dann "spalte2" etc. (sortierung von Strings!!!)
                foreach ($array as $key=>$val) {    // für jedes gefundene Elelement, zeige Spaltenname und Wert
                   
                echo "Spalte: ".$key." | Text: ".$val;

                Kommentar


                • #9
                  Hallo Danke für die schnelle Antwort!

                  Nach Deinen Änderugen taucht noch ein error (siehe Kommentar) auf:

                  PHP-Code:
                  $array = array();
                  //Schleife
                  while($x=mysql_fetch_array($result)) {
                    foreach (
                  $x as $key=>$val) { 
                       if(
                  strpos($suchbegriff$val0)) $array[$key][] = $val;    // Empty Delimiter
                    
                  }
                  }

                  asort($array);
                  foreach (
                  $array as $key=>$val) { 
                   echo 
                  "Spalte: ".$key." | Text: ".$val;

                  Ich habe strpos nochmal in der php doc nachgeschlagen und dort ist die Syntax doch eine andere oder habe ich das nicht verstanden, dort steht:

                  PHP-Code:
                  int strpos string haystackstring needle [, int offset]) 
                  Daraufhin habe ich folgendes probiert:

                  PHP-Code:
                  $array = array();
                  //Schleife
                  while($x=mysql_fetch_array($result)) {
                    foreach (
                  $x as $key=>$val) {
                   
                         if(
                  strpos($val$suchbegriff0)) $array[$key][] = $val;   
                      }
                  }

                  asort($array);
                  foreach (
                  $array as $key=>$val) { 
                   echo 
                  "Spalte: ".$key." | Text: ".$val;

                  Dabei gibt`s keine errors mehr, aber auch keine Ausgabe
                  Ist es richtig, dass ich die Syntax geändert habe, bzw. wo könnte der Fehler noch liegen?

                  Kommentar


                  • #10
                    Mir ist leider noch ein Problem klar geworden:

                    Ich benutze eine Blätterfunktion um durch die Ergebnsiseiten zu blättern, dafür wird immer ein LIMIT $star, $anzahl in jedem SELECT verwendet.

                    Wenn ich nun die Sortierung per ARRAY vornehmen würde, dann könnte ich ja jeweils nur eine Seite (mit den ersten Einträgen) behandeln.
                    Mein Ziel ist es aber die Sortierung über alle Seiten hinweg vorzunehmen.
                    Würde das trotzdem funktionieren?
                    Oder muss ich dann doch die Abfrage schon im SELECT machen?
                    Wie könnte die Abfrage im SELECT aussehen?
                    Oder sehe ich die Problematik falsch?

                    Vielen Dank im Vorraus!

                    Jogi

                    Kommentar


                    • #11
                      zum alten thema:
                      PHP-Code:
                      $array = array();
                      while (
                      $x mysql_fetch_assoc($result)) {
                         foreach (
                      $x as $key=>$val) { 
                           if(
                      strpos(strtolower($val), $suchstring0) != false) {
                                 
                      $array[$key][] = $val;
                          }
                        }
                      }


                      foreach (
                      $array as $key=>$val) { 
                          echo 
                      "<b>Spalte: </b>".$key." | Wert: ";
                          foreach(
                      $val as $wert) {
                           echo 
                      $wert." | ";
                         }            
                          echo 
                      "<br>";

                      Kommentar


                      • #12
                        Auch so klappt es leider nicht, ich erhalte kein Ergebnis, obwohl $x und $val gefüllt sind.

                        Du meinst ja, dass man das gleiche auch per mysql SELECT bewerkstelligen kann, wie müsste dafür der QUERY aufgebaut sein?

                        Danke für Deine Mühe!

                        Kommentar

                        Lädt...
                        X