1

Тема: Извлечение части данных из текстового поля

Здравствуйте!

Помогите, пожалуйста, решить такую задачу.

Имеется таблица products_description в которой поле products_description содержит довольно длинное описание товара.
Требуется урезать извлекаемый текст до определенного количества знаков или, что было бы еще лучше, абзацев.

Вот часть скрипта с запросом, где pd.products_description нужное поле:

$query = "select
            p.products_id,
                        p.products_ean,
            pd.products_name,
                        pd.products_description,
            p.products_price,
            p.products_image,
                   p.products_model,
                        p.group_permission_1,
            p.products_date_added,
            p.products_tax_class_id,
            s.specials_new_products_price
            from (products p INNER JOIN products_description pd ON p.products_id = pd.products_id) LEFT JOIN specials s ON p.products_id = s.products_id
            where p.products_status = '1'
            and pd.language_id = '2'
            and IF(s.specials_new_products_price>0, s.status = '1', '1')
            and IF(s.expires_date>0, s.expires_date>now(), '1')
                         ".$group_check."
                         ".$days."
            order by
            p.products_date_added DESC
            LIMIT 0," . $product_count ;

2

Re: Извлечение части данных из текстового поля

-- Первые сто символов.
SUBSTRING(`pd`.`products_description`, 1, 100),

-- Первые два абзаца, если они разделены двумя переносами строки.
SUBSTRING_INDEX(`pd`.`products_description`, "\n\n", 2)

3

Re: Извлечение части данных из текстового поля

Спасибо Hanut,

к сожалению, не получилось.

Если я правильно понял и надо просто заменить строку

pd.products_description,

на одну из предложенных, то в первом случае описание просто пропадает, сообщения об ошибке нет.
Во втором случае браузер выдает сообщение об ошибке:

Этот веб-канал содержит ошибки в коде.
..........................
Only one top level element is allowed in an XML document.
Строка: 2 Знак: 2

<b>Warning</b>:  Unexpected character in input:  '\' (ASCII=92) state=1 in <b>Z:\home\304SP2.dom\www\rss_news.php</b> on line <b>45</b><br />

На линии 45 находиться редактируемая строка.

Hanut сказал:

если они разделены двумя переносами строки.

Как это определить?

4

Re: Извлечение части данных из текстового поля

Второй вариант будет выглядеть так:
SUBSTRING_INDEX(`pd`.`products_description`, '\n\n', 2) AS `products_description`,

$query = "select
            p.products_id,
                        p.products_ean,
            pd.products_name,
            SUBSTRING(`pd`.`products_description`, 1, 100) AS `products_description`,
            p.products_price,
            p.products_image,
                   p.products_model,
                        p.group_permission_1,
            p.products_date_added,
            p.products_tax_class_id,
            s.specials_new_products_price
            from (products p INNER JOIN products_description pd ON p.products_id = pd.products_id) LEFT JOIN specials s ON p.products_id = s.products_id
            where p.products_status = '1'
            and pd.language_id = '2'
            and IF(s.specials_new_products_price>0, s.status = '1', '1')
            and IF(s.expires_date>0, s.expires_date>now(), '1')
                         ".$group_check."
                         ".$days."
            order by
            p.products_date_added DESC
            LIMIT 0," . $product_count ;

Для определения разделителя абзацев, посмотрите в phpMyAdmin что между ними стоит: два разрыва строки, один, или что-то еще.

5

Re: Извлечение части данных из текстового поля

Спасибо Hanut, теперь все отлично получилось.