- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Очередной пример как наставить костылей, а потом с ними пытаться бороться.
IT-комсомольцы на марше. (которые стоя в гамаках любят созданные ими же трудности)
Для современных систем (не только ВП) опасны домохозяйки, копипастящие советики из интернетов на свои сайты. Но куда опасней домохозяек - грамотные пхпшники, не желающие изучать систему. (с)Я
А это не может быть связано с MariaDB?
Дело в том что в прошлом месяце мой сайт находился на старом ВПС со старой версией Mysql 5.2 по моему, точно не помню, на ней этот запрос выполнялся быстрее, но в связи с обновлением оборудования мой сайт перенесли на новый впс там стоит вот эта mariaDB 5.6, погуглил выяснил что в новых версиях mysql конструкция ALTER IGNORE TABLE объявлена устаревшей, а в 5.7 её и вовсе запретили.
Хватит мучить БД. Перед добавляем проверяйте наличие дубля и всё.
И правильно делают.
Хватит мучить БД. Перед добавляем проверяйте наличие дубля и всё.
Легко сказать, это надо лезть в код плагина feedwordpress и дописывать условие, чтобы он по title проверял наличие дублей, а с уникальным индексом он отказывается добавлять новости те что идут в rss ниже дублирующего контента.
Легко сказать, это надо лезть в код плагина feedwordpress и дописывать условие, чтобы он по title проверял наличие дублей, а с уникальным индексом он отказывается добавлять новости те что идут в rss ниже дублирующего контента.
Ну да, надо дописать 1 строчку, не вижу в этом никаких проблем. Чудес не бывает.
Ну да, надо дописать 1 строчку, не вижу в этом никаких проблем. Чудес не бывает.
1 строчка это даже много , можно сделать и так INSERT INTO wp_posts заменить на INSERT IGNORE INTO wp_posts
тогда уникальный индес не даст создать запись с одинаковыми заголовками, не уверен конечно использует ли плагин feedwordpress собственный inset или использует API движка WP в таком случае
если вам не хочется модифицировать плагин feedwordpress, можно воспользоваться тригерами в базе
в идеале конечно лучше сделать TRIGGER BEFORE INSERT - и в случае дубля посылать SIGNAL (подобный пример есть тут ), но в этом случае нужно все-же дорабатывать плагин чтобы отлавливать сигналы
Более универсальным будет TRIGGER AFTER INSERT после инсерта у вас будет и текущий ID и заголовок , можно будет проверить на дубли и удалить текущую запись. хотя я не уверен как на это отреагирует база, не разу в тригере инсерта не удалял запись. попробуйте может свезет.
но на мой взгляд самым правильным вариантом было бы проверка на существование записи перед инсертом , и делал бы это в самом feedwordpress как написал LEOnidUKG
1 строчка это даже много , можно сделать и так INSERT INTO wp_posts заменить на INSERT IGNORE INTO wp_posts
тогда уникальный индес не даст создать запись с одинаковыми заголовками, не уверен конечно использует ли плагин feedwordpress собственный inset или использует API движка WP в таком случае
Нашёл в feedwordpress/syndicatedpost.class.php
INSERT INTO $wpdb->posts
SET
guid = '{$dbpost['guid']}',
post_author = '{$dbpost['post_author']}',
post_date = '{$dbpost['post_date']}',
post_date_gmt = '{$dbpost['post_date_gmt']}',
post_content = '{$dbpost['post_content']}',
post_title = '{$dbpost['post_title']}',
post_name = '{$dbpost['post_name']}',
post_modified = '{$dbpost['post_modified']}',
post_modified_gmt = '{$dbpost['post_modified_gmt']}',
comment_status = '{$dbpost['comment_status']}',
ping_status = '{$dbpost['ping_status']}',
post_status = '{$dbpost['post_status']}'
");
$this->_wp_id = $wpdb->insert_id;
То есть достаточно заменить INSERT INTO на INSERT IGNORE INTO и тогда можно будет обновляться с уникальным индексом на posts_title, я правильно понимаю?
Именно так.
Обновляет ооочень медленно, он начинает перебирать все id в итоге выполняется бесконечно, пока по Maximum execution time = 300 не отрубится.
Придётся пользоваться старым способом ALTER IGNORE TABLE он хоть и не идеальный, но похоже только он один рабочий, надо просить хостера отрубить обновления для mysql
upd: а вот если заменить insert на replace тогда работает достаточно быстро, но тут есть одна неприятность он меняет старые посты на новые, короче буду думать.