"Artoo" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> How can I start searching for the first space in a string while starting
at
> say the 150th character?  I'm trying to display the first 150 characters
of
> an article that is stored in a LONGTEXT filed of a MYSQL database, and
> should the 150th character be inside a word, I would want to finish
> displaying that word.
>
> For example supose the 150th character is the v in the word "privileges"
I
> would want to finish displaying the word and end with "privileges" rather
> then ending  with"priv"


If you want to go to the next space, try

SELECT
    @a:= LOCATE(' ', mytext, 150),
    IF( @a > 0,
        LEFT(mytext, @a ),
        mytext
    ) AS returntext
FROM dbase


If you have some other small set of terminal
characters, you can extend it like

SELECT
    @a:= LOCATE(' ', mytext, 150), @a:= IF(@a=0, 1000, @a),
    @b:= LOCATE('.', mytext, 150), @b:= IF(@b=0, 1000, @b),
    @c:= LOCATE(',', mytext, 150), @c:= IF(@c=0, 1000, @c),
    @first:= MIN(@a, @b, @c),
    IF( LENGTH(mytext) > 150),
        LEFT(mytext,
            IF(@first < 1000,
                @first,
                150
            )
        ),
        mytext
    ) AS returntext
FROM dbase


If you want more flexibility - which I would - I suggest
returning the first 170 characters or so, and truncate
more accurately in PHP.


SELECT
    LEFT(mytext, 170) AS returntext
FROM dbase


<?php

function TruncateAfterWord($str, $len) {
    if (strlen($str) <= $len)
        return $str;
    else {
        preg_match( "/\A([A-Za-z]*)/", substr($str, $len), $match );
        return substr($str, 0, $len) . $match[1];
    }
}

?>


--
Hugh Bothwell     [EMAIL PROTECTED]     Kingston ON Canada
v3.1 GCS/E/AT d- s+: a- C+++ L++>+++$ P+ E- W+++$ N++ K? w++ M PS+
PE++ Y+ PGP+ t-- 5++ !X R+ tv b++++ DI+++ D-(++) G+ e(++) h-- r- y+




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to