Вопрос по БД

(Ответов: 13, Просмотров: 1688)
Страница 1 из 2 12 Последняя
  1. Дипломник Аватар для Phonteq
    • Регистрация: 08.06.2011
    • Сообщений: 175
    • Репутация: 11
    Доброго времени суток ребятки!
    Вопрос посвящается людям хорошо разбирающимся в базах данных:
    Дело вот в чем, хочу сделать несколько копий wp в одной базе данных, с разными префиксами таблиц. Сайты будут полуСДЛ, под заработок, в БД имеется таблица плагина для уникализации текста, занимает она около 20мб(назовем её,допустим, "a_un1"), как сделать чтоб остальные копии этого плагина(к примеру "sec_un1", "thi_un1") обращались, к таблице "a_un1" и брали информацию именно из неё ?
    Нужны деньги?! Заработай их на продаже авиабилетов!
    • 0
  2. Дипломник Аватар для Phonteq
    • Регистрация: 08.06.2011
    • Сообщений: 175
    • Репутация: 11
    ну не проверю что никто не знает как это реализовать!
    Нужны деньги?! Заработай их на продаже авиабилетов!
    • 0
  3. Гуру Аватар для assai
    • Регистрация: 11.08.2011
    • Сообщений: 794
    • Репутация: 360
    Если я не ошибаюсь, могут помочь тип таблиц в mysql - Таблицы MERGE они вроде позволяют обьединять разные таблицы, создавать синонимы таблиц, но как с ними работать не помню (

    ---------- Сообщение добавлено 14:13 ---------- Предыдущее 14:10 ----------

    Просто не понятно как это все выглядит... если это копии таблицы a_un1 -- sec_un1", "thi_un1" то зачем тебе к перовой обращаться? да будет конечно использовано больше памяти в mysql, но меньше мороки будет...

    Либо как вариант залезть в код плагина, и указать ему явную таблицу , которая тебе нужна...
    • 1

    Спасибо сказали:

    Phonteq(29.10.2011),
  4. Дипломник Аватар для Phonteq
    • Регистрация: 08.06.2011
    • Сообщений: 175
    • Репутация: 11
    assai, спасибо, дело в том что "a_un1" таблица с контентом, остальные пустые, а на хостинге моем для бд не очень много места дается, таким способом решил оптимизировать, а вот идея переписать плагин весьма хороша
    Нужны деньги?! Заработай их на продаже авиабилетов!
    • 0
  5. Гуру Аватар для assai
    • Регистрация: 11.08.2011
    • Сообщений: 794
    • Репутация: 360
    Phonteq, на drupal было бы проще) на основе многосайтовости... Я не настраивал еще сам, но там можно было одному движку прописать алиасы домена и будут разные сайты. Только в конфигах прописать какие таблицы какой сайт будет использовать... Там же можно указывать общие таблицы для всех сайтов... На основе этого к примеру обьединяли пользователей для сайтов или типы контента )))
    • 0
  6. Дипломник Аватар для Phonteq
    • Регистрация: 08.06.2011
    • Сообщений: 175
    • Репутация: 11
    assai, имел опыт с друпалом) понравился, но заморочек много с ним поэтому вп выбираю
    Нужны деньги?! Заработай их на продаже авиабилетов!
    • 0
  7. Гуру
    • Регистрация: 30.08.2011
    • Сообщений: 517
    • Репутация: 134
    • Webmoney BL: ?
    Цитата Сообщение от Phonteq Посмотреть сообщение
    как сделать чтоб остальные копии этого плагина(к примеру "sec_un1", "thi_un1") обращались, к таблице "a_un1" и брали информацию именно из неё ?
    Делается непосредственно на PHP
    Поскольку это работа плагина, то переделываем запрос в плагине и всё.
    Больше в принципе описывать нечего, так как кода не видно а это же гадание на кофейной гуще :)
    • 0
  8. Дипломник Аватар для Phonteq
    • Регистрация: 08.06.2011
    • Сообщений: 175
    • Репутация: 11
    Kopc, Вот фрагмент кода плагина

    код

    // Save the posted value in the database
    foreach ($unik_options as $unik_opt) {
    update_option($unik_opt, $$unik_opt);
    }
    echo '<div class="updated"><p><strong>Опции сохранены</strong></p></div>';
    }
    $unik_total_synonyms = $wpdb->get_var("SELECT COUNT(*) FROM $unik_syn_table");
    ?>
    <div class="wrap">
    <h2>Уникализатор</h2>



    <h3>Настройки</h3>
    <form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>">
    <table class="form-table">
    <tr>
    <th colspan=2 scope="row">
    <input name="unik_mashup_paragraph" type="checkbox" <?if($unik_mashup_paragraph)echo "checked";?>> Перемешивать абзацы
    </th>
    </tr>
    <tr>
    <th colspan=2 scope="row">
    <input name="unik_mashup_sentence" type="checkbox" <?if($unik_mashup_sentence)echo "checked";?>> Перемешивать предложения в пределах абзаца
    </th>
    </tr>
    <tr>
    <th>
    <input name="unik_pressing" type="checkbox" <?if($unik_pressing)echo "checked";?>> Сделать выжимку (маленькую статью из большой)
    </th>
    <td>
    Уровень:
    <select name="unik_pressing_level">
    <option value=100 <?if($unik_pressing_level==100)echo "selected";?>>Больше текста
    <option value=90 <?if($unik_pressing_level==90)echo "selected";?>>90
    <option value=80 <?if($unik_pressing_level==80)echo "selected";?>>80
    <option value=70 <?if($unik_pressing_level==70)echo "selected";?><?if (!$unik_pressing_level) echo "selected";?>>70
    <option value=60 <?if($unik_pressing_level==60)echo "selected";?>>60
    <option value=50 <?if($unik_pressing_level==50)echo "selected";?>>50
    <option value=40 <?if($unik_pressing_level==40)echo "selected";?>>40
    <option value=30 <?if($unik_pressing_level==30)echo "selected";?>>30
    <option value=20 <?if($unik_pressing_level==20)echo "selected";?>>20
    <option value=10 <?if($unik_pressing_level==10)echo "selected";?>>Меньше текста
    </select>
    </td>
    </tr>
    <tr>
    <th>
    <input name="unik_ruslat" type="checkbox" <?if($unik_ruslat)echo "checked";?>> Заменять русские буквы на эквиваленты
    </th>
    <td>
    Уровень:
    <select name="unik_ruslat_level">
    <option value=100 <?if($unik_ruslat_level==100)echo "selected";?>>100% замена
    <option value=20 <?if($unik_ruslat_level==20)echo "selected";?>>20%
    <option value=15 <?if($unik_ruslat_level==15)echo "selected";?>>15%
    <option value=10 <?if($unik_ruslat_level==10)echo "selected";?>>10%
    <option value=9 <?if($unik_ruslat_level==9)echo "selected";?>>9%
    <option value=8 <?if($unik_ruslat_level==8)echo "selected";?>>8%
    <option value=7 <?if($unik_ruslat_level==7)echo "selected";?>>7%
    <option value=5 <?if($unik_ruslat_level==5)echo "selected";?><?if (!$unik_ruslat_level) echo "selected";?>>5%
    <option value=3 <?if($unik_ruslat_level==3)echo "selected";?>>3%
    <option value=2 <?if($unik_ruslat_level==2)echo "selected";?>>2%
    <option value=1 <?if($unik_ruslat_level==1)echo "selected";?>>1% слов
    </select>
    </td>
    </tr>
    <tr>
    <th>
    <input name="unik_synonymizer" type="checkbox" <?if($unik_synonymizer)echo "checked";?>> Синонимизация
    </th>
    <td>
    Глубина:
    <select name="unik_synonymizer_level">
    <option value=0 <?if($unik_synonymizer_level==0)echo "selected";?>>Максимальная
    <option value=1 <?if($unik_synonymizer_level==1)echo "selected";?>>1
    <option value=2 <?if($unik_synonymizer_level==2)echo "selected";?>>2
    <option value=3 <?if($unik_synonymizer_level==3)echo "selected";?>>3
    <option value=4 <?if($unik_synonymizer_level==4)echo "selected";?>>4
    <option value=5 <?if($unik_synonymizer_level==5)echo "selected";?>>5
    <option value=6 <?if($unik_synonymizer_level==6)echo "selected";?>>6
    <option value=7 <?if($unik_synonymizer_level==7)echo "selected";?>>7
    <option value=8 <?if($unik_synonymizer_level==8)echo "selected";?>>8
    <option value=9 <?if($unik_synonymizer_level==9)echo "selected";?>>9
    <option value=10 <?if($unik_synonymizer_level==10)echo "selected";?>>Слабо
    </select>
    </td>
    </tr>
    </table>
    <input type="hidden" name="cmd" value="unik_save_opt">
    <p class="submit">
    <input type="submit" name="Submit" value="<?php _e('Save Changes') ?>" />
    </p>
    </form>

    <h3>Уникализатор plugin разработан при поддержке:</h3>
    <table class="form-table">
    <tr><th>
    <ul>
    <li><a href="****</li>
    <li><a href="*****</li>
    </ul>
    </th></tr></table>

    <h3>Словарь Синонимайзера</h3>
    <table class="form-table" width="300px">
    <tr>
    <td>
    Добавить словарь синонимов (большой словарь добавляйте частями)<br />
    <b>формат:</b> слово|синоним1,синоним2,синоним3<br />
    Всего слов в базе: <b><?php echo $unik_total_synonyms; ?></b><br />
    <form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>">
    <input type="hidden" name="cmd" value="del_syn">
    <input type="submit" name="Submit" value="Очистить базу словаря" />
    </form>
    <form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>">
    <textarea cols=110 rows=12 name="synonims_dict"></textarea>
    </td>
    </tr>
    </table>
    <input type="hidden" name="cmd" value="add_syn">
    <p class="submit">
    <input type="submit" name="Submit" value="Добавить синонимы" />
    </p>
    </form>
    </div>
    <?php

    }

    function unik_get_syn_table() {
    global $wpdb;
    return $wpdb->prefix . "unik_synonyms_ru";
    }
    [свернуть]

    Основная таблица называется "a_unik_synonyms_ru"
    остальные с другим префиксом "j_unik_synonyms_ru" и т.д.

    Продолжение кода до конца, возможно потребуется

    function unikalizator_do_action($text){
    if (get_option('unik_pressing')) {
    $text = unik_text_pressing($text, get_option('unik_pressing_level'));
    }
    if (get_option('unik_mashup_paragraph') || get_option('unik_mashup_sentence')) {
    $text = unik_mashup_paragraph_sentence($text, get_option('unik_mashup_paragraph'), get_option('unik_mashup_sentence'), "\r\n");
    }
    if (get_option('unik_ruslat')) {
    $text = unik_replace_ruslat($text, get_option('unik_ruslat_level'));
    }
    if (get_option('unik_synonymizer')) {
    $text = unik_synonymizer_ru($text, get_option('unik_synonymizer_level'));
    }
    return $text;
    }

    function unik_mashup_paragraph_sentence($text, $mashup_paragraph = false, $mashup_sentence = false, $paragraph_symbol = "</p>") {
    $paragraphs = preg_split("/".str_replace("/", "\/", $paragraph_symbol)."+?/uims", $text, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
    if ($mashup_paragraph) {
    srand((float) microtime() * 10000000);
    shuffle($paragraphs);
    }
    if ($mashup_sentence) {
    foreach ($paragraphs as $key => $paragraph) {
    $paragraph = strip_tags($paragraph);
    if ($paragraph_symbol == "</p>")
    $paragraphs[$key] = "<p>";
    else
    $paragraphs[$key] = "";
    $paragraphs[$key] .= unik_mashup_sentence($paragraph);
    }
    }
    return join($paragraph_symbol, $paragraphs) . $paragraph_symbol;
    }

    function unik_mashup_sentence($text) {
    $sentences = unik_split_sentence($text);
    srand((float) microtime() * 10000000);
    shuffle($sentences);
    return join(" ", $sentences);
    }

    function unik_split_sentence($text) {
    $sentences = preg_split("/([\.\!\?])\s/u", trim($text), -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
    $sentences2 = array();
    $num = 0;
    foreach($sentences as $key => $sentence) {
    if ($sentence == "." || $sentence == "!" || $sentence == "?") {
    $sentences2[$num - 1] .= $sentence;
    continue;
    }
    $sentences2[$num] .= trim($sentence);
    $num++;
    }
    return $sentences2;
    }

    function unik_text_pressing($text, $pressing_level) {
    if ($pressing_level >= 100)
    return $text;
    $text = strip_tags($text);
    $sentences = unik_split_sentence($text);
    $press = round((count($sentences)*$pressing_level)/100);
    $rand_keys = array_rand($sentences, count($sentences) - $press);
    if (!is_array($rand_keys))
    return $text;
    foreach ($rand_keys as $rand_key) {
    unset($sentences[$rand_key]);
    }
    return join(" ", $sentences);
    }

    function unik_replace_ruslat($text, $level = 100) {
    $words = preg_split("/(\s+)/uims", $text, -1, PREG_SPLIT_DELIM_CAPTURE);
    $words_count = 0;
    $not_empty_words = array();
    foreach ($words as $key => $word) {
    if (trim($word)) {
    $not_empty_words[$key] = $word;
    $words_count++;
    }elseif (!preg_match('/\n/ims', $word))
    unset($words[$key]);
    }
    if ($words_count == 0) $words_count = 1;
    if ($words_count > count($not_empty_words)) $words_count = count($not_empty_words);
    $replace_count = round(($words_count * $level) / 100);
    $rand_keys = array_rand($not_empty_words, $words_count);

    $count = 0;
    foreach($rand_keys as $key => $rand_key) {
    if ($rword = unik_ruslat($words[$rand_key])) {
    $words[$rand_key] = $rword;
    $count++;
    }
    if ($count >= $replace_count)
    break;
    }
    $text = join(" ", $words);
    return $text;
    }

    function unik_ruslat($str) {
    $ruslat = array("а"=>"a","А"=>"A","е"=>"e","Е"=>"E","о"=>"o","О"=>"O","х"=>"x","Х"=>"X");
    $news_str = strtr($str, $ruslat);
    if ($str !== $news_str )
    return $news_str;
    else
    return false;
    }

    function unik_synonymizer_ru($text, $depth = 0) {
    $words = preg_split('/([a-яА-Я]+)/is', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
    $bwords = array();
    if ($bloked_words) {
    foreach ($bloked_words as $bw) {
    $tmp = preg_split("/\s+/", mb_strtolower($bw, "UTF-8"));
    $bwords = array_merge($bwords , $tmp);
    }
    }
    $new_text = "";
    $open_tag = false;
    $last_depth = 1000;
    foreach ($words as $word) {
    if ($open_tag) {
    $new_text .= $word;
    if (unik_is_opened_tag($word)) continue;
    if (unik_is_closed_tag($word)) {
    $open_tag = false;
    }
    continue;
    }
    if (unik_is_opened_tag($word)) {
    $open_tag = true;
    $new_text .= $word;
    continue;
    }
    if ($word == ' ') {$new_text .= $word; continue;}
    if (strlen($word) < 4) {$new_text .= $word; continue;}
    if (in_array(mb_strtolower($word, "UTF-8"), $bwords)) {$new_text .= $word; continue;}
    if ($ignore_stop_words) {
    if (in_array(mb_strtolower($word, "UTF-8"), $stop_words)) {
    $new_text .= $word; continue;
    }
    }
    if ($last_depth < $depth) {
    $new_text .= $word;
    $last_depth++;
    continue;
    }
    if ($synonym = unik_get_synonym($word)) {
    if (unik_my_mb_ucfirst($word) == $word) {
    $synonym = unik_my_mb_ucfirst($synonym);
    }
    $new_text .= $synonym;
    $last_depth = 0;
    }else {
    $new_text .= $word;
    }
    }
    return $new_text;
    }

    function unik_is_opened_tag($str) {
    if (strpos($str, '<') !== false)
    return true;
    else
    return false;

    }

    function unik_is_closed_tag($str) {
    if (strpos($str, '>') !== false)
    return true;
    else
    return false;

    }

    function unik_get_synonym ($word){
    global $unik_syn_table, $wpdb;
    $keyword = mb_strtolower($word, "UTF-8");
    $sql = "SELECT syn FROM $unik_syn_table WHERE keyword='$keyword' LIMIT 1";
    $syns = $wpdb->get_var($sql);
    if ($syns) {
    $words = explode(',', $syns);
    srand((float) microtime() * 10000000);
    return $words[array_rand($words)];
    } else {
    return false;
    }
    }

    function unik_my_mb_ucfirst($str, $e='UTF-8') {
    if (function_exists('mb_strtoupper')) {
    $fc = mb_strtoupper(mb_substr($str, 0, 1, $e), $e);
    return $fc.mb_substr($str, 1, mb_strlen($str, $e), $e);
    }else
    return ($str);
    }

    ?>
    [свернуть]
    Нужны деньги?! Заработай их на продаже авиабилетов!
    • 0
  9. Гуру
    • Регистрация: 30.08.2011
    • Сообщений: 517
    • Репутация: 134
    • Webmoney BL: ?
    Phonteq, я только один запрос к бд тут увидел, значит других вариантов быть не должно :)

    PHP код:
    $sql "SELECT syn FROM $unik_syn_table WHERE keyword='$keyword' LIMIT 1"
    меняем на
    PHP код:
    $sql "SELECT syn FROM "a_unik_synonyms_ru" WHERE keyword='$keyword' LIMIT 1"
    либо функцию
    PHP код:
    function unik_get_syn_table() {
    global 
    $wpdb;
    return 
    $wpdb->prefix "unik_synonyms_ru";

    Заменяем на
    PHP код:
    function unik_get_syn_table() {
    return 
    "unik_synonyms_ru";

    Подойдет любой из вариантов
    • 1

    Спасибо сказали:

    Phonteq(30.10.2011),
  10. Дипломник Аватар для Phonteq
    • Регистрация: 08.06.2011
    • Сообщений: 175
    • Репутация: 11
    Kopc, при первом способе не активируется плагин т.к. вызывает фатальную ошибку.
    При втором способе при публикации вот такая картина

    .

    Warning: array_rand() [function.array-rand]: Second argument has to be between 1 and the number of elements in the array in *****/plugins/***/***.php on line 340

    Warning: Invalid argument supplied for foreach() in ***/plugins/***.php on line 343

    Warning: Cannot modify header information - headers already sent by (output started at /****/plugins/***.php:340) in ****/wp-includes/pluggable.php on line 897
    [свернуть]


    340 строка это
    PHP код:
    $rand_keys array_rand($not_empty_words$words_count); 
    343 строка это
    PHP код:
    foreach($rand_keys as $key => $rand_key) { 
    и далее
    PHP код:
    if ($rword unik_ruslat($words[$rand_key])) {
                
    $words[$rand_key] = $rword;
                
    $count++;
            }
            if (
    $count >= $replace_count)
                break;
        } 


    ---------- Сообщение добавлено 11:20 ---------- Предыдущее 11:17 ----------

    Либо при использовании первого метода такая ошибка

    Развернуть текст

    Parse error: syntax error, unexpected T_STRING in ***/wp-content/plugins/***.php on line 435
    [свернуть]

    435 строка
    PHP код:
    $sql "SELECT syn FROM "a_unik_synonyms_ru" WHERE keyword='$keyword' LIMIT 1"
    Нужны деньги?! Заработай их на продаже авиабилетов!
    • 0
Страница 1 из 2 12 Последняя

Похожие темы

Темы Раздел Ответов Последний пост
вопрос по css
Web программирование 4 21.03.2011 22:54
Вопрос по WP
Софт, скрипты, сервисы 8 13.09.2010 18:54
Вопрос по RSS.
Блоги 10 15.07.2010 16:29
Вопрос
Партнерские программы 5 07.07.2010 14:53
Вопрос по PR ?
Google 40 14.12.2009 19:08

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры