Autor Beitrag
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 19.12.08 15:48 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 19.12.08 16: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.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.12.08 16:21 
ausblenden SQL-Anweisung
1:
SELECT SUBSTRING(Feld,1,100FROM Tabelle					
Yogu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 19.12.08 16: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:
ausblenden 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:

ausblenden 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:

ausblenden 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
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.12.08 16: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 19.12.08 17: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:
ausblenden 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;  
}
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.12.08 17:35 
Benutz doch strrpos, das ist bequemer ;)
Yogu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 19.12.08 17:46 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Benutz doch strrpos, das ist bequemer ;)

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

Ok, danke, ich hab's implementiert.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Fr 19.12.08 21: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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 19.12.08 22:38 
Aber wohl auch nur, wenn die Datenbankadresse nicht grad localhost heißt.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Yogu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 19.12.08 22: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...
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.12.08 23: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 19.12.08 23: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.