
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

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]