SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.10.2011 13:07:33

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Ввод данных из текстового файла

Исходные данные:

база Wordpress
таблица `wp_postmeta:

CREATE TABLE `wp_postmeta` (
  `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `meta_key` varchar(255) DEFAULT NULL,
  `meta_value` longtext,
  PRIMARY KEY (`meta_id`),
  KEY `post_id` (`post_id`),
  KEY `meta_key` (`meta_key`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


Когда пишется ПОСТ(`post_id`) при условии заполнения данных для keywords и descriptions - создаются `meta_key`='_aioseop_[description|keywords]'. (если ключевики и описания не заполняются, соответствующие строки в базе для конкретного ПОСТа, ессно, не создаются).

Проблема в том что на блоге WP имеется более 100 ПОСТов без keywords и descriptions. Задача состоит в том чтобы процесс их заполнения автоматизировать.
Имеется текстовый файл с ключевиками и описаниями где разделитель - перевод строки. Прошу помочь составить запрос чтобы ввести эти данные в `meta_value`, выбирая ключевики и описания рандомно. Стоит заметить что затрагивать нужно только те ПОСТы где _aioseop_description и _aioseop_keywords отсутствуют.

Спасибо заранее!

Отредактированно Fader (07.10.2011 13:19:58)

Неактивен

 

#2 07.10.2011 13:45:22

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Ввод данных из текстового файла

1) Создаем таблицу table_with_random_texts
2) Переливаем в неё данные из файла

LOAD DATA LOCAL INFILE 'c:/my_file.txt' INTO TABLE `table_with_random_texts`
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';


3) Обновляем вашу таблицу
update postmeta set meta_value=(select my_text from table_with_random_texts order by rand() limit 1) where meta_value='';

Неактивен

 

#3 07.10.2011 14:01:06

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

Позвольте уточнить: my_text это что?

Отредактированно Fader (07.10.2011 14:01:18)

Неактивен

 

#4 07.10.2011 14:19:55

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

это имя колонки из таблицы table_with_random_texts

Неактивен

 

#5 07.10.2011 16:01:03

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Ввод данных из текстового файла

Если вариантов в файле немного, то можно упростить в ручную их добавить в запрос.


update postmeta set meta_value=(
    select my_text from(
    select       'text1' as my_text
    union select 'text2' as my_text
    union select 'text3' as my_text
    union select 'text4' as my_text
    union select 'text5' as my_text
    union select 'text6' as my_text
    union select 'text7' as my_text
    ) a order by rand() limit 1
) where meta_value='';

Неактивен

 

#6 07.10.2011 17:01:31

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

А как этим созданным строкам с meta_value добавить колонку `meta_key` с _aioseop_description и _aioseop_keywords ?

Или я что-то не понимаю?


Вот пример всех метаданных ПОСТа с id = 316, где прописаны keys'ы и desc'и:

http://i27.fastpic.ru/big/2011/1008/20/cafb56c31a16a4072744eb7205aa0a20.png

Отредактированно Fader (08.10.2011 01:11:59)

Неактивен

 

#7 11.10.2011 11:01:04

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

ап, подскажите пожалуйста!

Неактивен

 

#8 11.10.2011 11:43:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

Fader написал:

Имеется текстовый файл с ключевиками и описаниями где разделитель - перевод строки.

Ключевики и описания на одной строке? И если да, то какой между ними разделитель?
Если нет, то как расположены в файле - последовательно или чередуются?

Неактивен

 

#9 11.10.2011 12:21:58

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

vasya написал:

Fader написал:

Имеется текстовый файл с ключевиками и описаниями где разделитель - перевод строки.

Ключевики и описания на одной строке? И если да, то какой между ними разделитель?
Если нет, то как расположены в файле - последовательно или чередуются?

Ключевики в одном файле. Формат следующий:

ключевик1, ключевик2, ключевик3, ключевикN1
ключевик11, ключевик12, ключевик13, ключевикN2
ключевик21, ключевик22, ключевик23, ключевикN3

т.е. через запятую, после каждого набора ключевиков перевод строки



Описания в другом файле. Каждое описание заканчивается переводом строки.

Неактивен

 

#10 11.10.2011 12:30:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

А у постов с пустыми ключевиками строки типа _aioseop_keywords пустые или отсутствуют?

Неактивен

 

#11 11.10.2011 12:35:28

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

Отсутствуют, я писал об этом вначале.

Неактивен

 

#12 11.10.2011 12:45:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

Тогда первые два пункта как советовал evgeny (см пост №2)

3)

insert into `wp_postmeta` (post_id, meta_key,meta_value)
select post_id, '_aioseop_keywords', (select my_text from table_with_random_texts order by rand() limit 1) as meta_value from `wp_postmeta` group by post_id having count(post_id)=9

В данном случе я исходил из предположения, что на каждый пост с пустыми описаниями/ключевиками приходится 9 строк. Это требует уточнения.
Кроме того не ясно по какому принципу нумеруется meta_id.


Аналогично для описаний из другого файла.

Неактивен

 

#13 11.10.2011 12:49:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

Обновил запрос в предыдущем сообщении.

Неактивен

 

#14 11.10.2011 13:16:16

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

Насколько я вижу на пост может приходиться разное количество строк.

Какие данные вам можно предоставить чтобы все было понятно однозначно?

Неактивен

 

#15 11.10.2011 14:37:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

Тогда

insert into `wp_postmeta` (post_id, meta_key,meta_value)
select t1.post_id, '_aioseop_keywords', (select my_text from table_with_random_texts order by rand() limit 1) as meta_value from
(select post_id from `wp_postmeta` group by 1) t1 left join
(select post_id from `wp_postmeta` where meta_key='_aioseop_keywords' group by 1) t2
using(post_id) where t2.post_id is null

Неактивен

 

#16 11.10.2011 15:15:07

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

Спасибо огромное! В итоге весь "HOW TO" следующий:

LOAD DATA LOCAL INFILE 'c:/my_file.txt' INTO TABLE `table_with_random_texts`
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';


insert into `wp_postmeta` (post_id, meta_key,meta_value)
select t1.post_id, '_aioseop_keywords', (select my_text from table_with_random_texts order by rand() limit 1) as meta_value from
(select post_id from `wp_postmeta` group by 1) t1 left join
(select post_id from `wp_postmeta` where meta_key='_aioseop_keywords' group by 1) t2
using(post_id) where t2.post_id is null


Верно?

Для описаний меняем то что выделено красным цветом в вашем #15 ?

Отредактированно Fader (11.10.2011 15:15:43)

Неактивен

 

#17 11.10.2011 15:22:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

Fader написал:

Для описаний меняем то что выделено красным цветом в вашем #15 ?

Не забудьте ещё очистить табличку `table_with_random_texts` или используйте для описаний другую.

Неактивен

 

#18 28.10.2011 16:43:29

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

Спасибо еще раз, очень помогли!

Только сейчас возникла необходимость усовершенствовать скрипт:

в таблице `table_with_random_texts` данные не подготовлены чтобы их сразу инсертить: т.о. мы имеем по одному ключевому слову на строку (а не набор ключевиков через запятую). Нужно предварительно сгруппировать наборы ключевиков из этой таблицы по 3-6 ключевика рандомно и разделить запятыми, т.е. привести к готовому виду.

Неактивен

 

#19 28.10.2011 20:14:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

select my_text from table_with_random_texts order by rand() limit 1
замените на
select group_concat(my_text) from table_with_random_texts order by rand() limit 5

Неактивен

 

#20 28.10.2011 20:36:06

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

Это означает брать по 5 строк вместо одной? Т.е. 5 ключевиков? А запятую как вставлять между ними? И возможно ли рандомизить не только слова, но и их количество: от 3 до 6?

Неактивен

 

#21 28.10.2011 22:36:06

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

Правильно
select group_concat(my_text) from (select my_text from table_with_random_texts order by rand() limit 5) z

Кол-во случайным образом брать не получится.

Неактивен

 

#22 28.10.2011 22:50:53

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

А что за "z" на конце, опечатка?
И что насчет запятых?

Неактивен

 

#23 28.10.2011 23:00:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

Fader написал:

А что за "z" на конце, опечатка?

Нет, это псевдоним для выборки (select my_text from table_with_random_texts order by rand() limit 5)


Fader написал:

И что насчет запятых?

А может попробовать? Они уже есть.

Неактивен

 

#24 28.10.2011 23:24:43

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Ввод данных из текстового файла

Хорошо.

Выражение полностью получается такое?


insert into `wp_postmeta` (post_id, meta_key,meta_value)
select t1.post_id, '_aioseop_keywords', (select group_concat(my_text) from (select my_text from table_with_random_texts order by rand() limit 5) ) z as meta_value from
(select post_id from `wp_postmeta` group by 1) t1 left join
(select post_id from `wp_postmeta` where meta_key='_aioseop_keywords' group by 1) t2
using(post_id) where t2.post_id is null
 

Отредактированно Fader (29.10.2011 00:03:19)

Неактивен

 

#25 28.10.2011 23:29:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ввод данных из текстового файла

Невооруженным взглядом видно, что потеряли закрывающую кавычку.
Ну и попробуйте сначала на тестовых данных - это даст самую лучшую уверенность в правильном результате.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson