Nur Vorkommen aus ersten gefundenem record werden angezeigt

  • Sarkkan
    Hi,
    Du bis ein "Schatz". Aber ich hab ne Fehlermeldung
    Fatal error: Maximum execution time of 30 seconds exceeded in ... httpdocs/searchit/glastest.php on line 15


    Und bei mir ist

    Code
    1. $searchResult = substr($searchResult, 0, $subPos);


    die Zeile 15.


    Sorry.
    Moni

  • "rernanded" schrieb:

    Fatal error: Maximum execution time of 30 seconds exceeded in ... httpdocs/searchit/glastest.php on line 15


    WAS?! O___O
    30 Sekunden Maximlae Script-Laufzeit?^^ Standard sind meine ich 5 Minuten.. :/ Wo testest du das den?
    Naja.. also entweder hast du jetzt viele Ressourcen hinzugefügt, oder ich habe ne Endlosschleife produziert^^

  • Ach mist^^

    PHP
    1. <span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">;<br />while((</span><span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">strripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$subPos</span><span class="syntaxkeyword">)) != </span><span class="syntaxdefault">$pos</span><span class="syntaxkeyword">){<br /> </span><span class="syntaxdefault">$searchResult </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$subPos</span><span class="syntaxkeyword">);<br /> } </span><span class="syntaxdefault"></span>

    Wir sollten vllt den Zeiger auch immer etwas vor rücken, sonst finden wir unendlich mal das letzte Vorkommen^^

  • Sarkkan


    So sieht mein Code jetzt aus, muß aber immer noch nen Bug haben da timeout wie vor.


    Sieh doch bitte nochmals drüber wennDu Lust und Zeit hast :). Bin schon ziemlich groggy :? heute Abend.


    Moni

  • &quot;Sarkkan&quot; schrieb:

    Ach mist^^

    PHP
    1. <span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">;<br />while((</span><span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> strripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $search</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $subPos</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!=</span><span class="syntaxdefault"> $pos</span><span class="syntaxkeyword">){<br /></span><span class="syntaxdefault">        $searchResult </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $subPos</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> </span>

    Wir sollten vllt den Zeiger auch immer etwas vor rücken, sonst finden wir unendlich mal das letzte Vorkommen^^


    Hi,
    hast Du es aufgegeben :)?


    ich habs auch nochmal probiert, hab aber tatsächlich noch den Timeout.
    Guck doch bitte nochmals drüber.
    Moni


    PS Hast Du ein gutes Script für eine Freitextsuche, also zur Suche nach mehreren Worten über/in mehrere Spalten gleichzeitig?

  • Arg >__< Ich glaube ich habe den Fehler gefunden.. Ich bin davon ausgegangen das der Offset-Parameter bei strripos automatisch von hinten beginnt und nicht wie bei den anderen vorne..
    Wir finden also nun an Position 100 noch einmal Glas und beim nächsten suchen fangen wir direkt wieder bei Position 100 an da ist ja das Wort Glas direkt wieder^^
    Gerade ne komplett andere Idee, die eigentlich auch viel einfacher ist:

    PHP
    1. <span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    if </span><span class="syntaxkeyword">((</span><span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> stripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $search</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 10</span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">)))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        $searchResult </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $subPos</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> </span>

    Wir suchen einfach in unserem string wieder vorwärts ob noch mal das Wort Glas vor kommt, wenn ja dann verkürzen wir den String um kurz vor diese Position ^^


    Und nein, leider habe ich so ein Skript spontan nicht :/
    Tut mir Leid :/

  • Sarkkan
    Mein Held :D Alles Super.


    Hab hier mal ein Suchscript, doch irgendwas ist nicht ganz okay. Der echo $query; zeigt mir an das ich korrekt suche. Keine fehlermeldung nix. Guck mal drüber wenn du willst.
    Moni

  • Ich glaube das Problem liegt an

    PHP
    1. <span class="syntaxdefault"></span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword"><</span><span class="syntaxdefault">count</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$eingabe_array</span><span class="syntaxkeyword">)-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">){ <br /> </span><span class="syntaxdefault">$query </span><span class="syntaxkeyword">.= </span><span class="syntaxstring">' AND '</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">//Verknüpfung der einzelnen Worte mit UND<br /></span><span class="syntaxkeyword">} </span><span class="syntaxdefault"></span>

    Hier müsste ein OR hin, den ansonsten sieht unsere Query nachher vllt so aus:

    SQL
    1. SELECT
    2. *
    3. FROM
    4. glasseiten
    5. WHERE
    6. inhalt LIKE '%glas%' OR url LIKE '%glas%'
    7. AND
    8. inhalt LIKE '%sand%' OR url LIKE '%sand%'

    und dann müsste die URL "like" Glas sein und der Inhalt "like" sand.

  • SQL
    1. SELECT * FROM glasseiten WHERE inhalt LIKE '%glas%' OR url LIKE '%glas%' AND inhalt LIKE '%logistik%' OR url LIKE '%logistik%'


    NeNe, das AND ist schon korrekt, ich suche oben zB nach glas und nach logistik. Also glas UND logistik in $inhalt ODER in $url.
    Ich glaube es fehlen () irgendwo. Bei sql kann man ja "schachteln".


    Vllt ist das ja korrekter??? :)

    SQL
    1. SELECT * FROM glasseiten WHERE inhalt LIKE '%glas%' AND inhalt LIKE '%logistik%' OR url LIKE '%glas%' AND url LIKE '%logistik%'


    Moni

  • So wäre es logisch, ja^^ Aber bei Programmiersprachen Sieht das wie folgt aus (ich versuche mich jetzt mal als Pseudo-MySQL Datenbank :D)

    • Ich soll alle Felder aus Reihen zurück geben
    • Die in der Tabelle glasseiten sind
    • Wo in dem Inhalts-Feld irgendwo Glas steht
    • ODER wo in der Url Glas drin steht UND in dem Inhalt Logistik zu finden ist
    • ODER wo in der Url Logistik zu finden ist

    Wobei du eigentlich dann wenigstens irgendwelche Ergebnise zurück bekommen solltest, den so oder so sollte doch eine der 3 letzten Bedingungen zutreffen.
    Was du ansonten mal versuchen kannst: UNION () :

    Code
    1. (SELECT * FROM glasseiten WHERE inhalt LIKE '%glas%' OR url LIKE '%glas%')
    2. UNION
    3. (SELECT * FROM glasseiten WHERE inhalt LIKE '%logistik%' OR url LIKE '%logistik%')

    Mit UNION kann man nämlich Suchergebnisse Zusammenfassen :)
    Aber da wird sich der Server glaube ich freuen :S


  • Ich hab mal Klammern () gesetzt und jetzt ist es logisch. UNION benutzt man doch eigentlich nur bei der Abfrage von 2 Tabellen?
    Ich denke aber etwas mit num_rows ist falsch ev. muß ich $rows definieren und dann $row->SPALTE benutzen oder oder oder


    Irgendwie bin ich echt genervt. Hat aber nix mit Dir zu tun.


    Moni

  • Ich meine das die Klammern es verschlimmern^^
    Vergleiche (wie wir sie hier oder bei If-Anweisungen haben) schauen quasi immer nur ob 1 (Ja) oder 0 (Nein) heraus kommt, klammern wir etwas ein wird die Klammer zuerst gelöst und dann anschließend mit dem Rest verglichen. 1 + 1 = 1, 0 + 0 = 0, 0 + 1 = 0 (quasi wie in der Mathematik mit + und -)

    Ersetzen wir das AND nun durch ein OR:

    Müssten wir Ergebnisse Geliefert bekommen


    PS: num_rows() ist bei dir Eine Variabel (du hast ein $ davor)

  • Code
    1. Leider kein/e Treffer. Bitte geben Sie einen oder mehrere andere Suchbegriffe ein!SELECT * FROM glasseiten WHERE (inhalt LIKE '%glas%' OR url LIKE '%glas%')


    Aber ich müsste doch wenigstens nur für ein SuchWort schon was angezeigt bekommen?
    Und da ist nix.


    Moni

  • Das kann aber doch jetzt nicht sein O.o
    Ich meine.. die Query steht eine Zeile unter dem "Leider keine.." .__.
    Sicher das wenigstens eine Verbindung besteht? hast du dir mal mysql_error() ausgeben lassen?
    (Übrigens erzeugt mysql_error() keine Ausgabe sondern gibt nur etwas zurück, daher müsstest du davor noch ein echo setzten9

  • Nix mit echo mysql_error(); Hab auch die serververbindung, dbname username password nochmals kontrolliert :cry:


    Moni


    PS Ich glaub ich gebs auf.