# Text abschneiden mit MySql



## jdgf (8. Oktober 2013)

Hallo,

ich habe ein Problem mit einer Datenbankabfrage, die den Text ab einem bestimmten Zeichen ausgeben soll, da durch die erste Abfrage (= Teaser) der ausgeschnittene Text schon ausgegeben ist.


```
$abfrage = "SELECT jahr, name, text FROM kb_geburtstage WHERE datum = $datum ORDER BY jahr ASC LIMIT 0,1";
$ergebnis = mysql_query($abfrage);
while($dsatz = mysql_fetch_assoc($ergebnis))
{
$neu = strpos($dsatz["text"], " ", 65);
echo "<p><strong style=\"padding-right:5px\">".$dsatz["jahr"]."</strong><span style=\"color: #003399; font-weight:700;\">".$dsatz["name"]."</span><br>".substr($dsatz["text"], " ", $neu)." ...</p>";
   }
```

Mein Problem liegt in dem Punkt, dass ich nicht weiß, wie der Text erst ab dem 66. Zeichen ausgegeben werden soll. Mein Lösungsversuch:


```
$abfrage = "SELECT jahr, name, text FROM kb_geburtstage WHERE datum = $datum ORDER BY jahr ASC";
$ergebnis = mysql_query($abfrage);
while($dsatz = mysql_fetch_assoc($ergebnis))
$neu = strpos($dsatz["text"], 67,) 
   {
echo "<p style=\"margin-top:15px\"><strong style=\"padding-right:10px; color:red\">".$dsatz["jahr"]."</strong><span style=\"color: #003399; font-weight:700;\">".$dsatz["name"]."</span></p><p style=\"text-align:justify\">".substr($dsatz["text"], " ", $neu)."</p>";  
   }
```

Was mache ich falsch?
Gruß Dietmar


----------



## Yaslaw (8. Oktober 2013)

```
SELECT
    jahr,
    name, 
    SUBSTRING(text FROM 66) AS teaser
FROM
    ...
```

Und zu deiner Frage was du falsch machst? Formatier mal dien Code und schau in dir genau an.
Was macht dier strpos()-Geschichte in der Schleifendeklaration anstelle in der Schleife?
Das { muss eine Zeile höher....


----------



## jdgf (8. Oktober 2013)

Danke für den Hinweis, ich habe den Code so abgeändert und es funktioniert.


```
while($dsatz = mysql_fetch_assoc($ergebnis))
   {
   //echo "<p class=\"strong\">$row->jahr</p><p class=\"standard\">$row->text</p><br>";
echo "<p style=\"margin-top:15px\"><strong style=\"padding-right:10px; color:red\">".$dsatz["jahr"]."</strong><span style=\"color: #003399; font-weight:700;\">".$dsatz["name"]."</span></p><p style=\"text-align:justify\">".substr($dsatz["text"], 66)."</p>";  
   }
```

Du kannst dir hier das Ergebnis ansehen. Es passt leider noch nicht, da die Kürzung des substr($dsatz["text"],66) nur für den ersten Geburtstag erfolgen soll.
Wie kann ich bestimmen, dass nur das erste Abfrageergebnis gekürzt wird?

Ist diese Abfrage, die alle Datensätze mit Ausnahme des ersten auswerfen soll, falsch?

```
$abfrage = "SELECT jahr, name, text FROM kb_geburtstage WHERE datum = $datum ORDER BY jahr ASC LIMIT 1,10";
```


----------



## BaseBallBatBoy (24. Oktober 2013)

>Es passt leider noch nicht, da die Kürzung des substr($dsatz["text"],66) nur für den ersten Geburtstag erfolgen soll.

Wie? Ich versteh nicht was dein Problem ist?


----------



## jdgf (24. Oktober 2013)

Ich habe es durch zwei Abfragen gelöst, beim Teaser wird nur die erste und beim Volltext werden beiden Abfrage eingefügt:

erste Abfrage:
$abfrage = "SELECT jahr, name, text FROM kb_test WHERE dat = $dat ORDER BY jahr ASC LIMIT 0,1";

zweite Abfrage:
$abfrage = "SELECT jahr, name, text FROM kb_test WHERE dat = $dat ORDER BY jahr ASC LIMIT 1,10";

Danke für deine Hilfe.


----------

