Entwickler-Ecke

Datenbanken - Ausgabe des Spalteninhalts begrenzen


Gerhard_S - Di 27.11.12 20:54
Titel: Ausgabe des Spalteninhalts begrenzen
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:

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 - Di 27.11.12 21:56

Versuch es mal mit SUBSTR() bzw. SUBSTRING(), siehe http://dev.mysql.com/doc/refman/5.1/de/string-functions.html


Gerhard_S - Di 27.11.12 22:56

Danke für den Hinweis auf die Substring-Funktion.
Trotzdem fehlt mir noch etwas Wissen:
die Abfrage

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:

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:

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

Quelltext
1:
SELECT uri, SUBSTRING(body,5,5) ...                    

und auch die Definition der PHP-Variable:

Quelltext
1:
$cont = $row['SUBSTRING(body,5,5)'];                    


WasWeißDennIch - Mi 28.11.12 09:17

Ich würde einen Feldalias verwenden.

SQL-Anweisung
1:
SELECT uri, SUBSTRING(body,150,50AS contpart, ...                    

Dann kannst Du den später wie ein "normales" Feld ansprechen.

PHP-Quelltext
1:
$cont = $row['contpart'];