Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) MySQL Как массово разбросать информацию из одного столбца таблицы в несколько других?

Как массово разбросать информацию из одного столбца таблицы в несколько других?


     19.12.2014    MySQL    977

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

Есть БД, в ней таблица, предположим, users. В ней есть несколько столбцов и строк.
Столбцы: id, login, info, email, phone, skype.

Строки:
id: 1, login: qwe, info: Мыло|qwe@qwe.ru||Телефон|79211234567||Skype|qwe, email: , phone: , skype: .
id: 2, login: asd, info: Мыло|asd@asd.ru||Skype|asd, email: , phone: , skype: .
id: 3, login: zxc, info: Мыло|zxc@zxc.ru||Телефон|79217654321, email: , phone: , skype: .
И т.д.

Т.е. изначально вся информация обо всех пользователях забивалась в один единственный столбец под названием info. Когда до меня наконец дошло, что это не удобно, я добавил ещё столбцы и встал перед проблемой: как аккуратно перенести эти данные из одного столбца в остальные? Разделение информации сделано посредством вертикальных палок. Одна вертикальная палка разделяет заголовок и какое-то содержимое, две палки - разную информацию. В начале и в конце, как можно видеть, палок не стоит, т.е. они именно разделительные. Ещё проблемка - не у всех забита полная информация (в примере только у id1 вся информация, у id2 и id3 чего-то не хватает).

Мне нужно рассортировать информацию таким образом, чтобы получилось примерно так:
id: 1, login: qwe, info: , email: qwe@qwe.ru, phone: 79211234567, skype: qwe.
id: 2, login: asd, info: , email: asd@asd.ru, phone: , skype: asd.
id: 3, login: zxc, info: , email: zxc@zxc.ru, phone: 79217654321, skype: .

За ненадобностью столбец info можно будет вообще удалить.

Разумеется, вручную это всё не сделать, так как база достаточно большая.

Прошу Вас предложить варианты. Есть SQL запрос, а я просто его не нашёл, и вы мне его назовёте - буду очень благодарен. Если придётся решать сторонними методами (вплоть до импорта в Excel), ну что поделать - импортируем.

С уважением,
Александр.

Ответа пока нет


Комментарии пользователей (1)

vitnet
218

2171 | 930

vitnet - 19 декабря 2014 21:36 - Эксперт

    $db->query( "SELECT * FROM " . USERPREFIX . "_users ORDER BY user_id ASC LIMIT 1" );
    
    while ( $row = $db->get_row() ) {
        $row['info'] = explode( "||", $row['info'] );
        foreach($row['info'] as $value) {
            $value = explode( "|", $value );
            echo '<pre>' . print_r($value[0] . ': ' . $value[1], true) . '</pre>';
        }
    }
    $db->free();

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 29.04.2014 qusach  MySQL