Выборка части поля для заполнения другой таблицы

Тема в разделе "Базы данных", создана пользователем latteo, 9 авг 2010.

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

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.550
    Симпатии:
    1.436
    База MySQL
    Есть таблица с доменными именами. Можно ли составить таблицу, которая будет содержать часть доменного имени до конца поля после последней точки.
    Например:
    исходная таблица
    Код:
    1	test.RU
    2	site.RU
    3	[url]www.com.RU[/url]
    4	some.COM
    результирующая
    Код:
    1	RU
    2	RU
    3	RU
    4	COM
     
  2. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Делаешь запрос к таблице, получаешь значение поля, обрабатываешь, примерно так
    PHP:
    $p str_replace(".","",strrchr"some.COM""."));
    Далее запрос на запись в другую таблицу, потом проверка записи.
    Все в цикле.
     
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.550
    Симпатии:
    1.436
    А так же можно сделать дамп и произвести необходимые замены с помошью PHP или notepad++, или любых других инструментов коих море.
    Но вопрос задан в разделе Базы Данных не просто так...
    Мне интересно можно ли это сделать с помощью SQL.
     
  4. DupleX

    DupleX Создатель

    Регистр.:
    20 апр 2006
    Сообщения:
    26
    Симпатии:
    4
    Это выражение в MySQL вернёт ru:

    SELECT SUBSTRING_INDEX('www.site.ru', '.', -1);
     
    latteo нравится это.
  5. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    можно с текстовыми функциями, если название поля site то
    Код:
    SELECT REVERSE(LEFT(REVERSE(site),LOCATE('.',REVERSE(site)) - 1)) AS domain FROM site_table
    
    чтоб только заглавными добавить UPPER
    Код:
    SELECT UPPER(REVERSE(LEFT(REVERSE(site),LOCATE('.',REVERSE(site)) - 1))) AS domain FROM site_table
    
    Подсчитать сколько
    Код:
    SELECT COUNT(*), REVERSE(LEFT(REVERSE(site),LOCATE('.',REVERSE(site)) - 1)) AS domain FROM site_table GROUP BY domain
    
    или просто без повторов
    Код:
    SELECT DISTINCT REVERSE(LEFT(REVERSE(site),LOCATE('.',REVERSE(site)) - 1)) AS domain FROM site_table
    
    фильтровать например через REGEXP
    Код:
    SELECT site, REVERSE(LEFT(REVERSE(site),LOCATE('.',REVERSE(site)) - 1)) AS domain FROM site_table WHERE site REGEXP '\.ru$';
    
     
    latteo нравится это.
Статус темы:
Закрыта.