Entwickler-Ecke

Sonstiges (Web-Entwicklung) - MySQL: Erste 100 Zeichen aus Feld


Yogu - Fr 19.12.08 16:48
Titel: MySQL: Erste 100 Zeichen aus Feld
Hallo,

ich möchte für eine News-Übersicht die ersten sagen wir mal 100 Zeichen des Beitrags anzeigen. Das sieht man ja öfters mal, dadurch wird Interesse geweckt.

Meine Frage nun: Muss ich trotzdem den gesamten Wert der Spalte anfordern? Oder gibt es eine spezielle Query, die mir die ersten 100 Zeichen der Spalte liefert? Das würde doch sehr viel Traffic zur Datenbank sparen.

Danke für eure Antworten!

Grüße,
Yogu


GTA-Place - Fr 19.12.08 17:03

So wie ich das mal verstanden habe, hast du keinerlei Traffic, da PHP ja serverseitig interpretiert wird und auch die Datenbank auf dem Server läuft. Es ist also nur eine interne Serverkommunikation und damit kein Traffic. Oder wie war das? Aber vermutlich wäre es trotzdem besser, das Query deinen Wünschen anzupassen.


Delete - Fr 19.12.08 17:21


SQL-Anweisung
1:
SELECT SUBSTRING(Feld,1,100FROM Tabelle                    


Yogu - Fr 19.12.08 17:48

Danke für die schnellen Antworten! :D

Sorry, dass meine Antwort so lange auf sich warten lies, aber ich wollte sicher gehen, dass auch alles funktioniert.

user profile iconGTA-Place hat folgendes geschrieben Zum zitierten Posting springen:
So wie ich das mal verstanden habe, hast du keinerlei Traffic, da PHP ja serverseitig interpretiert wird und auch die Datenbank auf dem Server läuft. Es ist also nur eine interne Serverkommunikation und damit kein Traffic.

Da kommt es jetzt darauf an, was man unter Traffic versteht. Ich meine damit auch die lokale Kommunikation über Port 443 (der war's doch, oder?) zwischen PHP und MySQL. Auf jeden Fall wird auch Speicher verbraucht. Ich weiß ja nicht, wie lange Beiträge die Newsposter verfassen, aber sicher ist sicher. :)

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:

SQL-Anweisung
1:
SELECT SUBSTRING(Feld,1,100FROM Tabelle                    

Danke! Das ist genau das, was ich suche. :D

Ich hab das jetzt so gelöst:

Die Query sieht so aus:


SQL-Anweisung
1:
SELECT news_id, news_title, news_time, SUBSTRING(news_text,1,100AS news_text_snip, LENGTH(news_text) AS news_text_length, poster_id FROM news ORDER BY news_time DESC                    

(gekürzt)

Da ich auch die eigentliche Länge des Feldes abfrage (news_text_length), kann ich dann mit PHP drei Punkte (...) hinzufügen, falls die gebraucht werden:


PHP-Quelltext:
1:
2:
3:
4:
if ($row['news_text_length'] > VIEW_news_text_snip_length)
  $news_text_snip = $row['news_text_snip'] . "...";
else
  $news_text_snip = $row['news_text_snip'];

Das nur für weitere Leser. :)

Grüße,
Yogu


Delete - Fr 19.12.08 17:51

Du könntest auch noch das letzte Leerzeichen ermitteln, den String dort abschneiden und die 3 Punkte setzen, damit Du nicht mitten im Wort abbrichst.


Yogu - Fr 19.12.08 18:29

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Du könntest auch noch das letzte Leerzeichen ermitteln, den String dort abschneiden und die 3 Punkte setzen, damit Du nicht mitten im Wort abbrichst.

Gute Idee!
:zustimm:

Ich hab mir folgende Funktion zusammengebastelt:

PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function cutStringAfterWord($string, $reallen, $maxlen) {
  if ($reallen > $maxlen) 
    for ($i = strlen($string); $i >= 0; $i--) {
      if ($string[$i] == " ") {
        return substr($string, 0, $i)."...";
      }
    }
  else
    return $string;  
}


Delete - Fr 19.12.08 18:35

Benutz doch strrpos [http://www.selfphp.de/funktionsreferenz/string_funktionen/strrpos.php], das ist bequemer ;)


Yogu - Fr 19.12.08 18:46

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Benutz doch strrpos [http://www.selfphp.de/funktionsreferenz/string_funktionen/strrpos.php], das ist bequemer ;)

Ach, das gibt's auch rückwärts :autsch:

Ok, danke, ich hab's implementiert.


Heiko - Fr 19.12.08 22:49

user profile iconGTA-Place hat folgendes geschrieben Zum zitierten Posting springen:
So wie ich das mal verstanden habe, hast du keinerlei Traffic, da PHP ja serverseitig interpretiert wird und auch die Datenbank auf dem Server läuft. Es ist also nur eine interne Serverkommunikation und damit kein Traffic. Oder wie war das? Aber vermutlich wäre es trotzdem besser, das Query deinen Wünschen anzupassen.

Stimmt nicht. Bei vielen Hostern laufen die Datenbankserver getrennt von den MySQL-Servern. An der Stelle wird es dann schon wichtig, wie groß der Datenfluss ist...


GTA-Place - Fr 19.12.08 23:38

Aber wohl auch nur, wenn die Datenbankadresse nicht grad localhost heißt.


Yogu - Fr 19.12.08 23:50

user profile iconGTA-Place hat folgendes geschrieben Zum zitierten Posting springen:
So wie ich das mal verstanden habe, hast du keinerlei Traffic, da PHP ja serverseitig interpretiert wird und auch die Datenbank auf dem Server läuft. Es ist also nur eine interne Serverkommunikation und damit kein Traffic. Oder wie war das? Aber vermutlich wäre es trotzdem besser, das Query deinen Wünschen anzupassen.

user profile iconHeiko hat folgendes geschrieben Zum zitierten Posting springen:
Stimmt nicht. Bei vielen Hostern laufen die Datenbankserver getrennt von den MySQL-Servern. An der Stelle wird es dann schon wichtig, wie groß der Datenfluss ist...

user profile iconGTA-Place hat folgendes geschrieben Zum zitierten Posting springen:
Aber wohl auch nur, wenn die Datenbankadresse nicht grad localhost heißt.

Bei uns wird der MySQL-Server zwar über localhost angesprochen, aber da werden doch trotzdem unnötige Datenpakete verschickt. Wenn man mal bedenkt, dass da pro Seitenaufruf ca. 15 komplette Beiträge verschickt werden, nur um dann auf 100 Zeichen gekürzt zu werden...


Delete - Sa 20.12.08 00:03

Ist doch auch piepegal, IMHO sollte man jede Datenbankabfrage auf das Nötigste beschränken (bei "SELECT * FROM" in Produktivumgebungen bekomme ich immer Arkl-Anfälle).


Yogu - Sa 20.12.08 00:38

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Ist doch auch piepegal, IMHO sollte man jede Datenbankabfrage auf das Nötigste beschränken.

Da bin ich ganz deiner Meinung! :zustimm:

Auch SQL-Anweisungen gehören zu "sauberem" Programmieren.