За последние 24 часа нас посетили 16562 программиста и 1679 роботов. Сейчас ищут 799 программистов ...

Объединение таблиц в новую

Тема в разделе "MySQL", создана пользователем alegat2114, 6 мар 2015.

  1. alegat2114

    alegat2114 Активный пользователь

    С нами с:
    18 апр 2014
    Сообщения:
    32
    Симпатии:
    0
    Всем доброго!

    Подскажите как объединить две таблицы и создать новую в той же базе. Нужно сделать запрос phpMyAdmin.

    Нужно получить следующий результат:

    Код (Text):
    1. INSERT INTO `wp_unik_synonyms_ru` (`s_id`, `keyword`, `syn`) VALUES
    2.    
    3. (1,'привет' ,'здорово,здравствуй'),
    4. (2,'здравствуй' ,'привет,здорово,здравствуйте'),
    5. (3,'условия' ,'данные'),
    6. (4,'вхождение' ,'вступление,'),
    7. (5,'нередко' ,'зачастую,неоднократно,частенько,часто');
    Из следующих таблиц word и sun:
    Код (Text):
    1.  
    2. INSERT INTO `word` (`id`, `key`) VALUES
    3.  
    4. (1,'привет'),
    5. (2,'здравствуй'),
    6. (3,'условия'),
    7. (4,'вхождение'),
    8. (5,'нередко');

    Код (Text):
    1. INSERT INTO `sun` (`id`, `keysun`, `s_id`) VALUES
    2.  
    3. (1,'здорово',1),
    4. (2,'здравствуй',1),
    5. (3,'привет',2),
    6. (4,'здорово',2),
    7. (5,'данные',3),
    8. (6,'здравствуйте',2),
    9. (7,'вступление',4),
    10. (8,'зачастую',5),
    11. (9,'неоднократно',5),
    12. (10,'частенько',5),
    13. (11,'часто',5);
    Где s_id необходимо расположить через запитую?

    Зарание спасибо!
     
  2. alegat2114

    alegat2114 Активный пользователь

    С нами с:
    18 апр 2014
    Сообщения:
    32
    Симпатии:
    0
    Пока решил пойти другим путем, как можно сделать ... но пока не до конца понял

    для начала вгоняю в базу следующие таблицы:


    Код (Text):
    1. CREATE TABLE IF NOT EXISTS `word` (
    2.   `id` int(11) NOT NULL AUTO_INCREMENT,
    3.   `keyword` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
    4.   `syn` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
    5.   PRIMARY KEY (`id`),
    6.   KEY `kkey` (`keyword`)
    7. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=97161 ;
    8.  
    9. INSERT INTO `word` (`id`, `keyword`) VALUES
    10.  
    11. (1,'привет'),
    12. (2,'здравствуй'),
    13. (3,'условия'),
    14. (4,'вхождение'),
    15. (5,'нередко');
    16.  
    17.  
    18. CREATE TABLE IF NOT EXISTS `sun` (
    19.   `id` int(11) NOT NULL AUTO_INCREMENT,
    20.   `keysun` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
    21.   `s_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
    22.   PRIMARY KEY (`id`),
    23.   KEY `kkey` (`keysun`)
    24. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=97161 ;
    25.  
    26. INSERT INTO `sun` (`id`, `keysun`, `s_id`) VALUES
    27.  
    28. (1,'здорово',1),
    29. (2,'здравствуй',1),
    30. (3,'привет',2),
    31. (4,'здорово',2),
    32. (5,'данные',3),
    33. (6,'здравствуйте',2),
    34. (7,'вступление',4),
    35. (8,'зачастую',5),
    36. (9,'неоднократно',5),
    37. (10,'частенько',5),
    38. (11,'часто',5);
    а после использую выборку SELECT с выводом в файл, примерно таким способом:


    Код (Text):
    1. SELECT keyword
    2. into outfile 'd:/myfile.lst' -- указываем файл
    3. fields terminated by ',' -- разделитель полей
    4. lines terminated by '<br>' -- разделитель строки
    5. from word;
    Но как пока использовать правильно выборку незнаю.

    Мне нужен следующий вариант вывода:

    слово|синоним1,синоним2

    Может кто знает как это осуществить?
    Или проще использовать GROUP_CONCAT?
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  4. alegat2114

    alegat2114 Активный пользователь

    С нами с:
    18 апр 2014
    Сообщения:
    32
    Симпатии:
    0
    Вроде получилось ... использовал следующий запрос:

    Код (Text):
    1.  
    2. SELECT a.id, a.keyword, b.keysun AS sun
    3. FROM `word` a
    4. LEFT JOIN `sun` b ON a.id=b.s_id;
    5.  
    6.  
    7. SELECT a.id, a.keyword, GROUP_CONCAT(DISTINCT b.keysun ORDER BY b.keysun ASC SEPARATOR ', ') AS sun
    8. FROM `word` a
    9. LEFT JOIN `sun` b ON a.id=b.s_id
    10. GROUP BY a.id;
    получился следующий вывод в phpMyAdmin
    [​IMG]

    а вот как сделать экспорт в формат .sql или создать таблицу wp_unik_synonyms_ru с данными не могу понять...думаю это просто

    Может кто подскажет?
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    твои две таблицы это нормально организованные данные. да, через group_concat() их можно склеить и показать вместе, но для реальных задач обычно удобнее иметь их раздельно — это называется "отношение один ко многим".

    зачем тебе захотелось их склеить? расскажи задачу.
     
  6. alegat2114

    alegat2114 Активный пользователь

    С нами с:
    18 апр 2014
    Сообщения:
    32
    Симпатии:
    0
    Нужна хорошая база синонимов для движка WP и других задач из 50 000 слов

    Добавлено спустя 9 минут 6 секунд:
    Но как их копировать в другую таблицу не могу понять ... поможете добить ... если вам нужна тоже база синонимов ... поделюсь. Я ее сдернул из программы USyn, тексты получаются более грамотные с уникальностью 75%. Поможете?

    Добавлено спустя 14 минут 43 секунды:
    Не подскажите, можно сделать копирование из двух таблиц в одну?

    Как это примерно выглядит?
    две функции
    Код (Text):
    1. INSERT INTO table1
    2. INSERT INTO table2
    3. SELECT * FROM table3;
    или

    Код (Text):
    1.  
    2. INSERT INTO table1,table2
    3. SELECT * FROM table3;
    или другой вариант?
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Это не так много, сделай индекс и ищи. Зачем еще одна таблица?

    Там же все написано.
     
  8. alegat2114

    alegat2114 Активный пользователь

    С нами с:
    18 апр 2014
    Сообщения:
    32
    Симпатии:
    0
    искать мне не надо, надо публиковать автоматом
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Тогда рассказывай что делаешь.
    Куда публиковать все данные сразу или как, я не понимаю задачу.
     
  10. alegat2114

    alegat2114 Активный пользователь

    С нами с:
    18 апр 2014
    Сообщения:
    32
    Симпатии:
    0
    Получать уникальные RSS новости с других сайтов для своих .... для этого мне нужна эта база синонимов для плагина WP. Сейчас понятна задача?
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ты ведь не сам придумал эту структуру в первом посте. она видимо в плагине как раз используется. стоит "улучшить" как все сломается.
    зачем?
     
  12. alegat2114

    alegat2114 Активный пользователь

    С нами с:
    18 апр 2014
    Сообщения:
    32
    Симпатии:
    0
    в плагине она используется дополнительно ... как синомайзер, но он не достаточно хорош для чтения переделанных текстов...

    походу все справился с поставленной задачей ... использовал способ с выводом в файл и собрал необходимую структуру слов.

    Использовал два запроса с созданием дополнительной таблицы:

    Код (Text):
    1. SELECT `s_id`, GROUP_CONCAT(`keysun`) as `keysun` FROM `sun` ORDER BY `id` GROUP BY `s_id`
    2.  
    3. SELECT DISTINCT keyword, keysun FROM word, sun2 WHERE word.id = sun2.id
    4. into outfile 'd:/myfile.lst' -- указываем файл
    5. fields terminated by '|' -- разделитель полей
    6. lines terminated by '<br>' -- разделитель строки
    Теперь буду испытывать на плагине...
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    а, ну давай, удачи! некоторые ошибки каждый ребенок должен совершить сам, так лучше запоминается.