Autor Beitrag
Gerhard_S
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Di 27.11.12 20:54 
Ich habe eine Suchmaschine (orcasearch) installiert, die sämtliche Seiten einer Internet-Präsenz im Volltext in einer MySQL-Datenbank speichert. Um die zuletzt aktualisierten 15 Seiten herauszufinden, benutze ich diese Abfrage:
ausblenden Quelltext
1:
SELECT uri, body, `sm.lastmod` FROM $tabelle WHERE uri NOT LIKE '%pfs%' ORDER BY `sm.lastmod` DESC LIMIT 15					

Die Ausgabe der "body"-Spalte (Typ "longtext") würde ich gern begrenzen:
a) beginnen ab Zeichen 150
b) enden mit Zeichen 200

Ist das mit MySQL möglich oder geht das nur mit PHP?
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Di 27.11.12 21:56 
Versuch es mal mit SUBSTR() bzw. SUBSTRING(), siehe dev.mysql.com/doc/re...tring-functions.html
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Di 27.11.12 22:56 
Danke für den Hinweis auf die Substring-Funktion.
Trotzdem fehlt mir noch etwas Wissen:
die Abfrage
ausblenden Quelltext
1:
SELECT uri, SUBSTRING(body,150,50), `sm.lastmod` FROM $tabelle WHERE uri NOT LIKE '%pfs%' ORDER BY `sm.lastmod` DESC LIMIT 15					

funktioniert; nur die Ausgabe nicht. Die Ausgabe ist eine zeilenweise Schleife über die Spalten der Tabelle:
ausblenden Quelltext
1:
2:
$abfrage ="SELECT uri, SUBSTRING(body,150,50), `sm.lastmod` FROM $tabelle WHERE uri NOT LIKE '%pfs%' ORDER BY `sm.lastmod` DESC LIMIT 15"; 
$ergebnis = mysql_query($abfrage);

und dann in einer HTML-Tabelle:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
while ($row = mysql_fetch_assoc($ergebnis)) {    
  $dasdatum = date("d.m.Y - H:i:s", $row['sm.lastmod']); 
  $dieuri = $row['uri'];
  $cont = $row['body'];
  echo "<tr><td>" . " <a href=\"" .$dieuri. "\">". $dieuri."</a>". "</td>" . "<td>" . $dasdatum . "</td>" .  "<td>" .$cont . "</td</tr>";    
  }

bleibt die Ausgabe für die $cont-Variable leer.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Nach etwas Suchen habe ich die Lösung gefunden:
1. Die SQL-Abfrage muss die Einschränkung enthalten
ausblenden Quelltext
1:
SELECT uri, SUBSTRING(body,5,5) ...					

und auch die Definition der PHP-Variable:
ausblenden Quelltext
1:
$cont = $row['SUBSTRING(body,5,5)'];					
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mi 28.11.12 09:17 
Ich würde einen Feldalias verwenden.
ausblenden SQL-Anweisung
1:
SELECT uri, SUBSTRING(body,150,50AS contpart, ...					

Dann kannst Du den später wie ein "normales" Feld ansprechen.
ausblenden PHP-Quelltext
1:
$cont = $row['contpart'];