Nur Vorkommen aus ersten gefundenem record werden angezeigt
-
-
Zitat von "rernanded"
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<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^^
-
PHP
Alles anzeigen<?php error_reporting (E_ALL & ~E_NOTICE); include_once("verbindung.php"); $ergebnis = mysql_query("SELECT * FROM glasseiten"); while($row = mysql_fetch_object($ergebnis)){ echo "<h2>$row->id / $row->url</h2><br/>"; $search = "glas"; $str = $row->inhalt; $pos = 0; $end = 0; while(($pos = stripos($str, $search, $end)) !== false){ $end = $pos + strlen($search); $searchResult = substr($str, $pos-10, strlen($search) + 115); $subPos = 0; while(($subPos = strripos($searchResult, $search, $subPos)) != $pos){ $searchResult = substr($searchResult, 0, $subPos); } echo '<b>HIER:</b> '.$searchResult.'<br/>'; } } ?>
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
-
Zitat von "Sarkkan"
Ach mist^^
PHP<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.
MoniPS 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<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 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.
MoniCode
Alles anzeigen<form action='simplesearch.php' method=POST> <input type='text' name='eingabe' value="<? echo $_POST['eingabe']?>"> <br> <input type='submit' value='suchen'> </form> <? error_reporting (E_ALL & ~E_NOTICE); include_once("simplesearch_verbindung.php"); if($_POST["eingabe"]=="") { echo "<b>Bitte geben Sie ein Suchwort ein.</b>"; } else { $eingabe_array = explode(' ',$_POST["eingabe"]); $query = 'SELECT * FROM glasseiten WHERE '; for($i=0; $i<count($eingabe_array); $i++){ $query .= "inhalt LIKE '%".$eingabe_array[$i]."%' OR url LIKE '%".$eingabe_array[$i]."%' "; if($i<count($eingabe_array)-1){ $query .= ' AND '; } } $result = mysql_db_query($query); if(mysql_num_fields($result) < 1) { echo "Es wurde/n leider kein/e Treffer gefunden. Bitte geben Sie einen oder mehrere andere Suchbegriff ein!"; echo $query; } else for($i=0; $i<$num_rows; $i++){ $id = mysql_result($result,$i,'id'); $url = mysql_result($result,$i,'url'); $first = array_slice(explode(' ', $inhalt), 0, 50); $kurzform = join(' ', $first) . '... '; echo '<a href="simplesearch.php?id='.$id.'">'.$url.'</a><br />'; echo $kurzform.'<br /><br />'; } } mysql_error(); ?>
-
Ich glaube das Problem liegt an
PHP<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:
SQLSELECT * FROM glasseiten WHERE inhalt LIKE '%glas%' OR url LIKE '%glas%' AND inhalt LIKE '%sand%' OR url LIKE '%sand%'
und dann müsste die URL "like" Glas sein und der Inhalt "like" sand.
-
SQL
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???
SQLSELECT * 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(SELECT * FROM glasseiten WHERE inhalt LIKE '%glas%' OR url LIKE '%glas%') UNION (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 -
PHP
Alles anzeigen<form action='simplesearch.php' method=POST> <input type='text' name='eingabe' value="<? echo $_POST['eingabe']?>"> <br> <input type='submit' value='suchen'> </form> <?php error_reporting (E_ALL & ~E_NOTICE); include_once("simplesearch_verbindung.php"); if($_POST["eingabe"]=="") { echo "<b>Bitte geben Sie ein Suchwort ein.</b>"; } else { $eingabe_array = explode(' ',$_POST["eingabe"]); $query = 'SELECT * FROM glasseiten WHERE '; for($i=0; $i<count($eingabe_array); $i++){ $query .= "(inhalt LIKE '%".$eingabe_array[$i]."%' OR url LIKE '%".$eingabe_array[$i]."%')"; if($i<count($eingabe_array)-1){ $query .= ' AND '; } } $result = mysql_db_query($query); if(mysql_num_rows($result) < 1) { echo "Leider kein/e Treffer. Bitte geben Sie einen anderen Suchbegriff ein!"; echo $query; } else for($i=0; $i<$num_rows($result); $i++){ $id = mysql_result($result,$i,'id'); $url = mysql_result($result,$i,'url'); $first = array_slice(explode(' ', $inhalt), 0, 50); $kurzform = join(' ', $first) . '... '; echo '<a href="simplesearch.php?id='.$id.'">'.$url.'</a><br>'; echo $kurzform.'<br><br>'; } } mysql_error(); ?>
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 oderIrgendwie 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 -)Code
Alles anzeigen(inhalt LIKE '%glas%' OR inhalt LIKE '%logistik%') AND (url LIKE '%glas%' AND url LIKE '%logistik%') -- So Nun finden wir Glas, aber keine Logistik: (1 || 1) && ( 0 || 0) 1 && 0 0 -- Finden wir nun Glas und Logistik (1 || 1) && (1 || 1) 1 && 1 1
Ersetzen wir das AND nun durch ein OR:
Code
Alles anzeigen(inhalt LIKE '%glas%' OR inhalt LIKE '%logistik%') OR (url LIKE '%glas%' AND url LIKE '%logistik%') -- So Nun finden wir Glas, aber keine Logistik: (1 || 1) || ( 0 || 0) 1 || 0 1 -- Finden wir nun Glas und Logistik (1 || 1) || (1 || 1) 1 || 1 1
Müssten wir Ergebnisse Geliefert bekommen
PS: num_rows() ist bei dir Eine Variabel (du hast ein $ davor)
-
-
Fehler glaube ich gefunden =D
Du verwendest mysql_db_query(), diese erwartet als erstes die Datenbank und als 2. die Query, du übergibst aber nur den ersten Parameter^^
Versuch mal mysql_query oder gib noch eine Datenbank an -
-
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.
-
Okey.. tut mir Leid dann bin ich langsam wirklich überfragt... tut mir Leid
-
Ich stells mal ins Forum als neuen Beitrag vllt weiß jemand anders ja mehr als wir zwei.
TSCHAU-TSCHAU
Moni
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!