Pisze unierwersalna klase do wyswietlania ostatnich topikow z phpBB biggrin.gif (czym to ja sie zajmuje 8) - az sam sie sobie dzwie) i dazac do jak najlepszego zoptymalizowania skryptu zdecydowalem ze za obcinanie dlugosci topika bedzie odpowiedzialny sql.
I sklecilem takie zapytanie:
[sql:1:3ff0dca573]SELECT topic_id, topic_last_post_id, LEFT( topic_title,
IF (
LENGTH( topic_title ) < 25, LENGTH( topic_title ) , LOCATE( ' ', topic_title, 25 ) )
) AS topic_title
FROM forum_topics
ORDER BY topic_time DESC
LIMIT 15 [/sql:1:3ff0dca573]
Teraz pojawia sie problem przy wyswietlaniu rekordow gdzie w topic_title znajduja sie znaki typu +, ! etc. czyli te ktore sa wykorzystywane w zapytaniach.
W przypadku prostego zapytania bez kawalka
[sql:1:3ff0dca573]LEFT( topic_title,
IF (
LENGTH( topic_title ) < 25, LENGTH( topic_title ) , LOCATE( ' ', topic_title, 25 ) )
) AS topic_title[/sql:1:3ff0dca573]
wszystko jest ok.
I teraz pytanie w jaki sposob obejsc ten problem zeby rekordy zawierajace znaki specjalne byly wyswietlane.

Nie wchodzi tutaj w gre:
:arrow: dodawanie do bazy danych rekordow z add_slashes a potem przy wyswietlaniu strip
:arrow: przycinanie dlugosci stringa z poziomy php

Update 1:
Z tego co sie dowiedzialem LOCATE zwraca 0 w przypadku nie znalezienia spacji w stringu jesli string przekracza dopuszcalna dlugosc.
Czyli znaki specjalne typu ! + moga byc w strngu ktory ma mniej niz 25 znakow biggrin.gif
Wiec teraz pytanie jakby przerobic to zapytanie ?

Update 2:
problem rozwiazany trzebabylo dac jeszcze jednego IF'a:
[sql:1:3ff0dca573]SELECT topic_id, topic_last_post_id, LEFT( topic_title,
IF (
LENGTH( topic_title ) < 25, LENGTH( topic_title ) ,
IF (
LOCATE( ' ', topic_title, 25 ) = 0, LENGTH( topic_title ) , LOCATE( ' ', topic_title, 25 ) )
)
) AS topic_title
FROM forum_topics
ORDER BY topic_time DESC
LIMIT 15 [/sql:1:3ff0dca573]