Hast Du das drauf? Hier mal ein Code den mir jemand geschrieben hat und erwähnt hat das JOINS zu langsam sind und UNION wahrscheinlich das richtige sei. Das hab ich doch schonmal gelesen
Moni
Beiträge von rernanded
-
-
Hab da mal ein SELECT, das aber nicht funzt.
MoniCode
Alles anzeigen$sql = "SELECT * FROM domains, keywords, link_keyword0, link_keyword1, link_keyword2, link_keyword3, link_keyword4, link_keyword5, link_keyword6, link_keyword7, link_keyword8, link_keyword9, link_keyworda, link_keywordb, link_keywordc, link_keywordd, link_keyworde, link_keywordf WHERE keywords.keyword_id = link_keyword0.keyword_id OR keywords.keyword_id = link_keyword1.keyword_id OR keywords.keyword_id = link_keyword2.keyword_id OR keywords.keyword_id = link_keyword3.keyword_id OR keywords.keyword_id = link_keyword4.keyword_id OR keywords.keyword_id = link_keyword5.keyword_id OR keywords.keyword_id = link_keyword6.keyword_id OR keywords.keyword_id = link_keyword7.keyword_id OR keywords.keyword_id = link_keyword8.keyword_id OR keywords.keyword_id = link_keyword9.keyword_id OR keywords.keyword_id = link_keyworda.keyword_id OR keywords.keyword_id = link_keywordb.keyword_id OR keywords.keyword_id = link_keywordc.keyword_id OR keywords.keyword_id = link_keywordd.keyword_id OR keywords.keyword_id = link_keyworde.keyword_id OR keywords.keyword_id = link_keywordf.keyword_id ORDER BY domains.domain ASC limit 0,100";
-
Hab die DB nicht angelegt muß sie aber nutzen. Die 16 Tabellen link_keyword1 ... 16 sind entstanden durch die Umwandlung von keywords in md5 hash. Eigentlich lauteten Sie link_keyword0 ... 9 und link_keyworda ... f. Fing der md5 hash mit 1 an dann wurde das keyword in link_keyword1, fing er mit f an dann wurde es in link_keywordf geschrieben. Die keywords sind Ergebnis einer Websuche mit einem Spider.
Ich muß nun die Tabelleninhalte auswerten oder daraus eine neue Tabelle machen die ich einfacher abfragen kann.
Moni
-
Hallo, ich brauche für eine Suche mit SELECT ... eine Idee wie es geht wenn ich in einer DB 19 Tabellen habe:
domains mit den 2 Feldern domain_id und domain
keywords mit den 2 Feldern keyword_id und keyword
link_keyword0 mit den 3 Feldern link_id, keyword_id und domain
...
link_keyword16 mit den 3 Feldern link_id, keyword_id und domain
links mit den 4 Feldern link_id, url, title und descriptionIn den gleichlautenden Feldnamen sind identische Werte so daß sich entsprechende Abhängigkeiten der Tabellen untereinander sowie der Werte in den Feldern ergeben. Ich möchte nun per SELECT eine Suche über alle Felder einrichten, mit welcher Art Verknüpfung muß ich "arbeiten"? Wahrscheinlich INNER JOIN denke ich. Was kommt an die Stelle der Fragezeichen ???
Moni
Code
Alles anzeigen1: // Abfrage formulieren 2: $query = "SELECT ??? 3: FROM ??? INNER JOIN ??? "; 4: // Abfrage ausführen 5: $result = mysql_query($query) or die("Query failed: ". mysql_error()); 6: // Ergebnis ausgeben 7: while ( $row = mysql_fetch_array($result) ) { 8: echo $row['spalte'], $row['spalte'], $row['spalte'], ... "<br>n"; 9: } 10: // Ergebnis freigeben 11: mysql_free_result($result)
-
Hi, das ist mein Code (s.o.). Mit meinem Server bzw. der Hauptdomain gehts problemlos, sonst gar nicht.
Moni
-
-
Hallo
gibts eine Möglichkeit mit php alle Zeichen in allen Werten einer Spalte zwischen < und > durch ... zu ersetzen?
Wahrscheinlich mit preg_replace('/<.*?>/', '...', $str); ???Moni
-
Ja klar. Doch mit mysql_select_db() erhalte ich jetzt ein "Incorrect database name". Mit mysql_query() kommt gar nichts. Nur heisst die Datenbank tatsächlich so wie in meiner ..._verbindung.php, also alles korrekt meinerseits. Muß am Provider/Server liegen.
Den ruf ich mal an. Denn mit anderen Suchscripten, allerdings kann ich mit denen immer nur nach einem Wort suchen, oder mit truncate und update oder insert ist alles möglich. Also mach Dir keine SorgenMoni
Nachtrag:
Was ist den beiden Fällen unten unter link zu verstehen???mysql_select_db(database,link)
mysql_query(query,link)
-
Hi Sören,
guck mal hier benutz ich ständig und macht keine probleme, aber nicht "schimpfen" bin kein Profi.
MoniPHP
Alles anzeigen<?php $dbref = 0; /* Verbindung zum Datenbank-Server */ $db = 0; /* Verbindung zur Datenbank */ $dbref = @mysql_connect("sql.serveradresse.de:3306","db_user","db_pw"); if (empty($dbref)) /* Datenbank-Server-Fehler */ { Header("Location: ../simplesearch-verbindungsfehler.htm"); /* Ausgabe der Fehler-Seite */ } else { $db = @mysql_select_db("db_moni",$dbref); if (!$db) /* Datenbank-Fehler */ { Header("Location: ../simplesearch-verbindungsfehler.htm"); /* Ausgabe der Fehler-Seite */ } else { /* kein Fehler */; } } ?>
oder ich nutze direkt im Hauptcode ohne include
Codemysql_connect("sql.serveradresse.de:3306","db_user","db_pw"); mysql_select_db("db_moni") or die ("Datenbank existiert nicht.");
Moni
PS
Ich hatte es doch ohne _db_ probiert -
Aus irgendeinem Grund funzt die Suche mit dem Script nicht. $query erscheint, Fehlermeldungen mit error_reporting und mysql_error() ergeben nix.
MoniPHP
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 oder mehrere andere Suchbegriffe 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>'; } } echo mysql_error(); ?>
-
Ich stells mal ins Forum als neuen Beitrag vllt weiß jemand anders ja mehr als wir zwei.
TSCHAU-TSCHAU
Moni
-
Nix mit echo mysql_error(); Hab auch die serververbindung, dbname username password nochmals kontrolliert :cry:
Moni
PS Ich glaub ich gebs auf.
-
NÖ tuts nicht, bekomme nicht mal mehr den $query angezeigt noch die echos "Bitte geben ..." und "Leider keine ..."
Moni
-
-
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
-
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
-
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(); ?>
-
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?
-
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
-
keine Ahnung, ich hab doch nur den Code übernommen denn Du gepostet hast.
Enlosschleife könnte wohl sein.Moni