Volltextsuche...

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

  • Volltextsuche...

    Hallo ich habe eine Suche, die in vielen Spalten einer Tabelle sucht

    $firmenquery = mysql_query("SELECT name1, kontakt_nr, matchcode FROM kontakte WHERE matchcode LIKE '$sort1%' OR name1 LIKE '$sort1%' OR name2 LIKE '$sort1%' OR name3 LIKE '$sort1%' OR ma1_name LIKE '$sort1%' OR ma2_name LIKE '$sort1%' OR ma3_name LIKE '$sort1%' ORDER BY matchcode LIMIT ".$start.",".$limit);

    Nun meine Frage bzw. Problem: Wie lese ich NUR den Spalteninhalt aus, wo eben die Suche gestimmt hat? In meinem Fall oben z.B. wenn in der Tabelle kontakte name3 LIKE '$sort1%' ist, möchte ich, dass der Spalteninhalt von name3 ausgelesen wird und immer auch der Matchcode...

    Hat jmd n Tipp?

  • #2
    wirst du wohl die elemente des resultSets nochmal nach dem string durchsuchen müssen und dann nur dieses ausgeben.

    Kommentar


    • #3
      Kannst Du mir das ein wenig genauer erklären, habs nicht verstanden...

      Kommentar


      • #4
        naja ..
        du kriegt aus der datenbank-abfrage ein resultset ($rs) zurück.
        du machst dann bspw.
        PHP-Code:
        while ($array mysql_fetch_array($rs)) {
             foreach (
        $array as $spalten_name => $spalten_text) {
                 if (
        strpos($spalten_text$such_string)) { // also ungleich false
                     
        echo "gefunden in spalte ".$spalten_name."<br>";
                     echo 
        "text: ".$spalten_text;
                 }
             }

        Zuletzt geändert von graf; 23.06.2003, 12:49.

        Kommentar


        • #5
          keine ursache, gern geschehen!

          Kommentar


          • #6
            ... Ich bin ja noch nicht fertig, aber trotzdem natürlich schonmal danke! ;-)

            So, hab viel getestet aber irgend wie läuft's noch nicht so richtig...

            Zur besseren Orientierung nochmal der geänderte code:

            PHP-Code:
            $firmenquery mysql_query("SELECT kontakt_nr, matchcode, name1, name2, name3, ma1_name, ma2_name, ma2_name FROM kontakte WHERE matchcode LIKE '$sort1%' OR name1 LIKE '$sort1%' OR name2 LIKE '$sort1%' OR name3 LIKE '$sort1%' OR ma1_name LIKE '$sort1%' OR ma2_name LIKE '$sort1%' OR ma3_name LIKE '$sort1%' ORDER BY matchcode LIMIT ".$start.",".$limit);

            $i 0;
            $i2 0;
            while (
            $array mysql_fetch_array($firmenquery)) {
                 echo 
            "i2: ".$i2."<br>";
                 
            $i2++;
                 foreach (
            $array as $spalten_name => $spalten_text) {
                     echo 
            "i: ".$i."<br>";
                     
            $i++;
                     
                     if (
            strpos($spalten_text$sort1)) { // also ungleich false
                         
            echo "gefunden in spalte ".$spalten_name."<br>";
                         echo 
            "text: ".$spalten_text."<br>";
                         echo 
            "LINK: <a href=\"show.php?kontakt_nr=".$kontakt_nr."\">".$matchcode."</a><br><br>";
                     }
                 }

            Jetzt mein Suchergebnis ($sort1=sch) - sorry für die Länge, aber ich glaube so erklärt's sich am Besten...:

            i2: 0
            i: 0
            i: 1
            i: 2
            i: 3
            i: 4
            i: 5
            i: 6
            i: 7
            i: 8
            i: 9
            i: 10
            i: 11
            i: 12
            i: 13
            i2: 1
            i: 14
            i: 15
            i: 16
            i: 17
            i: 18
            i: 19
            i: 20
            i: 21
            i: 22
            i: 23
            i: 24
            i: 25
            i: 26
            i: 27
            i2: 2
            i: 28
            i: 29
            i: 30
            i: 31
            i: 32
            i: 33
            i: 34
            i: 35
            i: 36
            i: 37
            i: 38
            i: 39
            i: 40
            i: 41
            i2: 3
            i: 42
            i: 43
            i: 44
            gefunden in spalte 1
            text: Schering Deutschland GmbH
            LINK:

            i: 45
            gefunden in spalte matchcode
            text: Schering Deutschland GmbH
            LINK:

            i: 46
            gefunden in spalte 2
            text: Schering Deutschland GmbH
            LINK:

            i: 47
            gefunden in spalte name1
            text: Schering Deutschland GmbH
            LINK:

            i: 48
            i: 49
            i: 50
            i: 51
            i: 52
            gefunden in spalte 5
            text: Hr. xxxx
            LINK:

            i: 53
            gefunden in spalte ma1_name
            text: Hr. xxxx
            LINK:

            i: 54
            i: 55
            i2: 4
            i: 56
            i: 57
            i: 58
            i: 59
            i: 60
            i: 61
            i: 62
            i: 63
            i: 64
            i: 65
            i: 66
            i: 67
            i: 68
            i: 69
            i2: 5
            i: 70
            i: 71
            i: 72
            i: 73
            i: 74
            i: 75
            i: 76
            i: 77
            i: 78
            i: 79
            i: 80
            i: 81
            i: 82
            i: 83
            i2: 6
            i: 84
            i: 85
            i: 86
            i: 87
            i: 88
            i: 89
            i: 90
            i: 91
            i: 92
            i: 93
            i: 94
            i: 95
            i: 96
            i: 97
            i2: 7
            i: 98
            i: 99
            i: 100
            i: 101
            i: 102
            i: 103
            i: 104
            i: 105
            i: 106
            i: 107
            i: 108
            i: 109
            i: 110
            i: 111
            i2: 8
            i: 112
            i: 113
            i: 114
            i: 115
            i: 116
            i: 117
            i: 118
            i: 119
            i: 120
            i: 121
            i: 122
            i: 123
            i: 124
            i: 125
            i2: 9
            i: 126
            i: 127
            i: 128
            i: 129
            i: 130
            i: 131
            i: 132
            i: 133
            i: 134
            i: 135
            i: 136
            i: 137
            i: 138
            i: 139

            Die Ausgabe beweist also, dass die MySQL mehr ergebnisse ausgespuckt hat, als wie angezeigt werden. Und hier komm ich nicht weiter. strpos müsste doch nach jeder ausgabe von $i2 was finden!?!
            Desweiteren versteht ich nicht, wieso die Spaltennummer UND der Spaltenname angezeigt wird. Nach der foreach-Schleife ( foreach ($array as $spalten_name => $spalten_text) ) sollte doch nur der Spaltenname verfügbar sein...

            Kommentar


            • #7
              fang doch mal klein an und lass dir in der foreach schleife die array-elemente ausgeben. (ohne if-abfrage)

              du hast recht, normal muss bei jedem durchlauf der while-schleife etwas gefunden werden.

              und vielleicht lässt du dir auch den query ausgeben, der "wirklich" an mysql gesandt wird. wird wahrscheinlich ok sein, aber bei der fehlersuche, sollte man alles berücksichtigen.

              Kommentar


              • #8
                Also schonmal zu
                ..strpos müsste doch nach jeder ausgabe von $i2 ..
                strpos gibt die position des ersten zeichen zurücks bei dem der match stattfindet, sprich wenn direkt am anfang gemacht wird gibt strpos, 0 zurück, obwohl ein match stattgefunden hat, das könnte vielleicht schonmal was erklären.
                strpos

                oder einfach um das Problem zu beheben vor der if abfrage
                PHP-Code:
                $spalten_text=" ".$spalten_text

                rth
                H I L F E
                GD FreeType Antialising
                Gesuch PHP Entwicklungsumgebung
                ------------------------------------------
                Der Cmabrigde rael tset, sruf whoin du wlilst

                Kommentar


                • #9
                  strpos( ...) != false
                  "müsste" dann auch funktionieren, stimmt die dumme 0, manchmal wäre es eben doch besser, wenn die bedingungen nur boolsche werte akzeptieren würden, dann wäre das jetzt kein problem.

                  und dein lik wird so nicht erscheinen, sondern eher so
                  PHP-Code:
                  echo "LINK: <a href=\"show.php?kontakt_nr=".$array["kontakt_nr"]."\">".$array["matchcode"]."</a><br><br>"
                  Zuletzt geändert von graf; 24.06.2003, 11:47.

                  Kommentar


                  • #10
                    So, der Link haut hin, danke...

                    Hab jetzt die if bedingung rausgenommen und erzeigt natürlich alle Spalten an, is ja soweit nich schlimm, das zeigt ja schonmal das es hinhaut...

                    Im Einsatz wird die Suche zudem wahrscheinlich oft mit Werten wie "%irgendwas" benutzt und da ich weiß nicht, ob dass mit strpos hin haut, da das %-Zeichen ja SQL-Syntax is, vielleicht liegt da ja auch schon das alte Problem??

                    Ich bräuchte jetzt also sowas wie strpos nur was richtig funktioniert... ;-)
                    Und was auch den das %-Zeichen berücksichtig...

                    Kommentar


                    • #11
                      (strpos($spalten_text, $sort1)!=false)

                      Hab ich natürlich ausprobiert... aber daran lags auch nicht...
                      Mit $sort1=$irgendwas kam gar keine Ausgabe (ausser $i & $i2 natürlich) zustande...

                      Kommentar

                      Lädt...
                      X