Скопировать из одной таблицы первые 150 символов в другую

Тема в разделе "Базы данных", создана пользователем a33, 28 окт 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. a33

    a33

    Регистр.:
    8 сен 2006
    Сообщения:
    219
    Симпатии:
    54
    Задача: Есть интернет-магазин. У товаров заполнены полные описания. Нужно заполнить краткие описания достаточно скопировать первые 150-300 символов из полного.

    Но чтобы не делать это руками, как это сделать через SQL запрос?
    Спасибо.
     
  2. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    Код:
    UPDATE `product`
    SET `short_description` = SUBSTRING (`full_description`,1,150)
    
     
    a33 и agalakov нравится это.
  3. a33

    a33

    Регистр.:
    8 сен 2006
    Сообщения:
    219
    Симпатии:
    54
    Единственное, выдало ошибку
    Код:
    FUNCTION SUBSTRING does not exist
    Погуглил, оказывается после SUBSTRING нельзя ставить пробел. Удалил пробел и сработало.
    Спасибо, сработало!

    Ха.. теперь другая проблема. В больших описаниях была html разметка, вставлены видео и после того как дернулись 150 символов.. ну вы понимаете :) .. незакрытые теги и даже такое:
    Код:
    <p>Отличный эквалайзер для автомобиля Смотрите видео:</p>
    <p><iframe width="360" height="213" src="http://www.youtube.co
    Значит, мне надо сначала вычистить теги.... Еще бы хотелось в конце добавить троеточие. Чтобы было : "Отличный эквала..." .

    Есть идеи? :)
     
    Последнее редактирование: 28 окт 2013
  4. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    Да, часто пробелы втыкаю перед функциями MySQL.. :ah:

    для вычистить тэги использовать php-функцию strip_tags
    Код:
    <?php
    mysql_connect(...);
    mysql_select_db(...);
    if ($res = mysql_query('select id,full_description from products'))
    while ($row = mysql_fetch_assoc($res)) {
      $desc = strip_tags($row['full_description']);
      $desc = substr($desc, 0, 150) . '...';
      $desc = mysql_real_escape_string($desc);
      mysql_query ("UPDATE products SET short_description = '{$desc}' WHERE id = {$row['id']}");
    }
     
  5. sparsame

    sparsame Постоялец

    Регистр.:
    20 авг 2011
    Сообщения:
    85
    Симпатии:
    11
    не совсем понятно с чем вы работаете... если с бд, то это одно если у вам нужен парсер, то это совсем другое....
    Если с названием топика вы не ошиблись то это элементарный php и ничего общего с мускулом тут нет. Но Если вы решили делать краткое описание, то совсем не обязательно создавать кучи лишних данных и засорять текстом бд...достаточно сделать 1 отображение текста первые 150 символов, при нажатии на полное описание, отображать не 150,а все символы ...А так получается у вас вы делаете масло масляное
     
  6. ImNIK

    ImNIK Писатель

    Регистр.:
    7 июл 2012
    Сообщения:
    3
    Симпатии:
    0
    Как вариант с помощью регулярок составить запрос, правда как это сделать в MySQL надо поиск4а, в MS проблем бы не было. А так sparsame прав, вы нарушаете нормализацию БД, дублируя поля.
     
  7. yaski

    yaski

    Регистр.:
    21 фев 2010
    Сообщения:
    474
    Симпатии:
    277
    Можно еще в шаблоне вместо краткого описания вставить полное описание, образанное функцией truncatе
    Код:
    {$article|truncate:150:'..':true:true}
    Получится что-то вроде
    База меньше будет по объему
     
  8. a33

    a33

    Регистр.:
    8 сен 2006
    Сообщения:
    219
    Симпатии:
    54
    Всем спасибо за ответы. В итоге нанял девочку за 300 рублей руками набила оригинальные краткие описания.
     
Статус темы:
Закрыта.