Как в mysql массово добавить кейворды.

12 3
J
На сайте с 06.07.2011
Offline
169
1242

Доброго времени суток.

basetube(база) --> w_content(таблица) ---> descs(поле) --> идут ID от 1 до 1500000

Каждый ид содержит в себе информацию по видео, минуты, описание, теги.. и т д

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

К примеру в title написано "Super puper sambo clip."

в файлике keywords.txt

new clip

clip 2014

..

.

my favorie video

Соответственно после запуска скрипта title уже будет такого рода: "Super puper sambo clip. my favorie video"

Таким образом нужно 1,5 миллиона описаний подправить, точнее дописать.

D
На сайте с 14.01.2007
Offline
153
#1

из пхп вам понадобятся функции file и rand. для связи с БД подойдёт PDO. ну а в MySQL хватит UPDATE

ещё вопросы?

J
На сайте с 06.07.2011
Offline
169
#2
Dinozavr:
из пхп вам понадобятся функции file и rand. для связи с БД подойдёт PDO. ну а в MySQL хватит UPDATE

ещё вопросы?

Спасибо. Имелось ввиду, может сможет кто-нибудь набросать скрипт.

D
На сайте с 14.01.2007
Offline
153
#3

вам в другой раздел

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#4
jano:
Спасибо. Имелось ввиду, может сможет кто-нибудь набросать скрипт.

Профит с сайта тоже будет идти кому-нибудь?

Подпись))
J
На сайте с 06.07.2011
Offline
169
#5

Спасибо за ответы.

Нашёл скрипт, который меняет одно значение на другое. Кто-нибудь сможет помочь что бы замена была из файла к примеру key.txt, подставлялся в случайном порядке один из кейвордов.

<?php

// Written by Mark Jackson @ MJDIGITAL

// http://www.mjdigital.co.uk/blog

// Ищем...

$search = 'ЧТО_НУЖНО_ЗАМЕНИТЬ'; // Например: 'www.old-site.ru'

// Меняем на... Используется при $queryType = 'replace'

$replace = 'НА_ЧТО_ЗАМЕНЯЕМ'; // Например: 'www.new-site.ru'

// Настройки базы данных

$hostname = "localhost";

$database = "ИМЯ_БАЗЫ_ДАННЫХ";

$username = "ИМЯ_ПОЛЬЗОВАТЕЛЯ_БАЗЫ_ДАННЫХ";

$password = "ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БАЗЫ_ДАННЫХ";

// Варианты значения переменной $queryType 'search' (вывод результатов поиска) или 'replace' (поиск с заменой)

$queryType = 'replace';

// Показывать ошибки или нет (true/false)

$showErrors = true;

//////////////////////////////////////////////////////

//

// Код ниже не редактировать

//

//////////////////////////////////////////////////////

if($showErrors) {

error_reporting(E_ALL);

ini_set('error_reporting', E_ALL);

ini_set('display_errors',1);

}

$MJCONN = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR);

mysql_select_db($database,$MJCONN);

$table_sql = 'SHOW TABLES';

$table_q = mysql_query($table_sql,$MJCONN) or die("Cannot Query DB: ".mysql_error());

$tables_r = mysql_fetch_assoc($table_q);

$tables = array();

do{

$tables[] = $tables_r['Tables_in_'.strtolower($database)];

}while($tables_r = mysql_fetch_assoc($table_q));

$use_sql = array();

$rowHeading = ($queryType=='replace') ?

'Replacing \''.$search.'\' with \''.$replace.'\' in \''.$database."'\n\nSTATUS | ROWS AFFECTED | TABLE/FIELD (+ERROR)\n"

: 'Searching for \''.$search.'\' in \''.$database."'\n\nSTATUS | ROWS CONTAINING | TABLE/FIELD (+ERROR)\n";

$output = $rowHeading;

$summary = '';

foreach($tables as $table) {

$field_sql = 'SHOW FIELDS FROM '.$table;

$field_q = mysql_query($field_sql,$MJCONN);

$field_r = mysql_fetch_assoc($field_q);

do {

$field = $field_r['Field'];

$type = $field_r['Type'];

switch(true) {

case stristr(strtolower($type),'char'): $typeOK = true; break;

case stristr(strtolower($type),'text'): $typeOK = true; break;

case stristr(strtolower($type),'blob'): $typeOK = true; break;

case stristr(strtolower($field_r['Key']),'pri'): $typeOK = false; break;

default: $typeOK = false; break;

}

if($typeOK) {

$handle = $table.'_'.$field;

if($queryType=='replace') {

$sql[$handle]['sql'] = 'UPDATE '.$table.' SET '.$field.' = REPLACE('.$field.',\''.$search.'\',\''.$replace.'\')';

} else {

$sql[$handle]['sql'] = 'SELECT * FROM '.$table.' WHERE '.$field.' REGEXP(\''.$search.'\')';

}

$error = false;

$query = @mysql_query($sql[$handle]['sql'],$MJCONN) or $error = mysql_error();

$row_count = @mysql_affected_rows() or $row_count = 0;

$sql[$handle]['result'] = $query;

$sql[$handle]['affected'] = $row_count;

$sql[$handle]['error'] = $error;

$output .= ($query) ? 'OK ' : '-- ';

$output .= ($row_count>0) ? '<strong>'.$row_count.'</strong> ' : '<span style="color:#CCC">'.$row_count.'</span> ';

$fieldName = '`'.$table.'`.`'.$field.'`';

$output .= $fieldName;

$erTab = str_repeat(' ', (60-strlen($fieldName)) );

$output .= ($error) ? $erTab.'(ERROR: '.$error.')' : '';

$output .= "\n";

}

}while($field_r = mysql_fetch_assoc($field_q));

}

echo '<pre>';

echo $output."\n";

echo '<pre>';

?>

[Удален]
#6

Вот бро ... это минимальный вариант вроде того что ты хотел сделать, как я понял из поста

<?php


$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

$words = file('key_file.txt'); // читаем слова в массив построчно

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, title FROM w_content"; // вытаскиваем из таблицы данные, тут лучше использовать LIMIT
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$new_title = '';
$rand_keyword = array_rand($words); // вытащили случайное слово из файла
$new_title = $row[title'] . " " . $rand_keyword; // добавили случайное слово к title
$sql2 = "UPDATE w_content SET title= '".$new_title."' WHERE id = '".$row['id']."'"; // обновили значение в базе
}

$conn->close();

?>

ps. редактор почему то заметил [] на ***91; и ***93;

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

J
На сайте с 06.07.2011
Offline
169
#7
Dark_hawK:
Вот бро ... это минимальный вариант вроде того что ты хотел сделать, как я понял из поста

<?php


$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

$words = file('key_file.txt'); // читаем слова в массив построчно

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, title FROM w_content"; // вытаскиваем из таблицы данные, тут лучше использовать LIMIT
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$new_title = '';
$rand_keyword = array_rand($words); // вытащили случайное слово из файла
$new_title = $row[title'] . " " . $rand_keyword; // добавили случайное слово к title
$sql2 = "UPDATE w_content SET title= '".$new_title."' WHERE id = '".$row['id']."'"; // обновили значение в базе
}

$conn->close();

?>

ps. редактор почему то заметил [] на ***91; и ***93;
pps. имей ввиду, наколенках набросал, для начала лучше сделать бэкап базы, используй на свой страх и риск, и если база большая скорее всего памяти не хватит, по этому лучше использовать LIMIT

Большое спасибо, но скрипт ругнулся на строчку:

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ']' in /usr/my/s1.php on line 21

---------- Post added 11-11-2014 at 19:11 ----------

Скрипт сейчас отрабатывает, но ничего не меняет. Лог полностью пустой.

---------- Post added 11-11-2014 at 19:41 ----------

Косяк в этой строчке:

$sql = "SELECT id, title FROM w_content";

В таблице: w_content есть куча полей, вот в этих полях есть поля title

Нужно как-то массово прописать запрос, что бы все поля в таблице w_content пошли в обработку.

[Удален]
#8

ну я ж незнаю какие у тебя там поля точно есть, какие ты указал я с такими и написал :)

ps.

Лог полностью пустой.
какой лог ? от чего там что то должно быть ?
J
На сайте с 06.07.2011
Offline
169
#9
Dark_hawK:
ну я ж незнаю какие у тебя там поля точно есть, какие ты указал я с такими и написал :)

ps. какой лог ? от чего там что то должно быть ?

Скрипт запускал таким запросом: php -q s1.php < /dev/null > script1.log

Если была ошибка, то писался лог. :)

Таблица w_content далее поле desc, потом уже в нём идёт title, который нужно править.

---------- Post added 11-11-2014 at 20:18 ----------

jano:
Скрипт запускал таким запросом: php -q s1.php < /dev/null > script1.log
Если была ошибка, то писался лог. :)

Таблица w_content далее поле desc, потом уже в нём идёт title, который нужно править.

Вот скриншот:

[Удален]
#10

а что возвращает пхп май админ при запросе SELECT id, title FROM w_content ?

можно попробовать тогда добавить SELECT id, title FROM w_content where id != ''

после строчки while($row = $result->fetch_assoc()) { добавить var_dump($row['title']); и запустить ... должен выводиться title из базы

ps ну и раз уж такое дело в начало самое добавьте

error_reporting(E_ALL);

ini_set('error_reporting', E_ALL);

ini_set('display_errors',1);

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий