ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > PHP, PERL, MySQL, JavaScript
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 17.12.2008, 19:27
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Можно написать хп.
Получится нечто вродь такого

Код:
delimiter ;;
CREATE PROCEDURE cl()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE s VARCHAR(100);  
  DECLARE cur CURSOR FOR SELECT DISTINCT SUBSTRING_INDEX(`title`,' ',2) FROM `table`;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
  OPEN cur;
  REPEAT
    FETCH cur INTO s;
    DELETE FROM `table` WHERE `id` IN (SELECT `t1`.`id` FROM (SELECT * FROM `table`) as `t1` WHERE `t1`.`title` LIKE CONCAT(s,'%') AND `id` <> (SELECT `t2`.`id` FROM (SELECT * FROM `table`) as `t2` WHERE `t2`.`title` LIKE CONCAT(s,'%') LIMIT 1));
  UNTIL done END REPEAT;
END;;
Вызывается хп так:
Код:
call cl()
где cl - эт имя нашей поцедуры.

Объясним некоторые специфические моменты:
  1. SUBSTRING_INDEX(`title`,' ',2) - это по сути то, сколько ведущих слов нам брать. Слова разделяются пробелами. Например если этот код применить к строке "Перевозчик 3 Transporter 3 (2008) TS" получим "Перевозчик 3"
  2. FROM (SELECT * FROM `table`) - такой финт ушами понадобился всвязи с некоторыми особенностями мускула
  3. CONCAT(s,'%') - соответственно объединяем получанную нами из курсора строку со знаком % для составления шаблона.

Может код неоптимален и тд и тп - но он будет работать Если найдешь что оптимизировать - оптимизируй.

P.S. На достаточно большой базе при слабой машине - вполне можешь повесить субд. Или выполнение может занять продолжительное время.
 

  #12  
Старый 17.12.2008, 19:38
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

ИМХО, легче набрать пяток модераторов, которые разберут эти авгиевы конюшни, а потом будут следить, чтобы не выкладывали по 10 раз одно и то же
 

  #13  
Старый 17.12.2008, 19:44
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Gifts автоматизция- великая вещь. Главное с умом подходить

Можно на стройке и кирпичи на 30-й этаж на горбу таскать - однако ж для чего то придумали подъемные краны, блоки и другие хитроумные приспособления =)
 

  #14  
Старый 18.12.2008, 02:15
gisTy
Постоянный
Регистрация: 24.05.2008
Сообщений: 589
Провел на форуме:
3629857

Репутация: 504


По умолчанию

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

  #15  
Старый 18.12.2008, 10:51
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Цитата:
Сообщение от gisTy  
ну ну... однажды что-то не так пойдет, что то не так удалится из базы..
А бэкапы на что? Легче восстановить новости за пол дня (а то и меньше - ночной бэкап + лог журналов), чем удалять 30к записей или больше вручную =)
 

  #16  
Старый 18.12.2008, 11:24
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

А лучше при создании новости проверять есть ли похожие
 

  #17  
Старый 18.12.2008, 12:33
#Wolf#
Постоянный
Регистрация: 26.03.2008
Сообщений: 311
Провел на форуме:
3799424

Репутация: 479
По умолчанию

Цитата:
Сообщение от Isis  
А лучше при создании новости проверять есть ли похожие
естественно проверяется. если название точ в точь одинаковое то новость не добавится. постят боты =\
дык они в конце слеш допишут и все(((
 

  #18  
Старый 18.12.2008, 14:41
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
Провел на форуме:
804931

Репутация: 526
По умолчанию

Цитата:
Сообщение от #Wolf#  
естественно проверяется. если название точ в точь одинаковое то новость не добавится. постят боты =\
дык они в конце слеш допишут и все(((
Точно так же - проверяешь процент совпадения, или первые n слов.
Можно впринципе даж триггер на добавление в данную таблицу повесть - и в нем проверять.
Но что лучше конечн виднее тому, кто проектировал систему
 

  #19  
Старый 18.12.2008, 16:06
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

Цитата:
Сообщение от #Wolf#  
естественно проверяется. если название точ в точь одинаковое то новость не добавится. постят боты =\
дык они в конце слеш допишут и все(((
%LIKE%
 

  #20  
Старый 18.12.2008, 20:32
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

VDShark А что делать с разными версиями программы? Например PHP 5.2.6, PHP 5.2.8 Будут считаться одинаковыми, тоже самое с фильмами - Перевозчик ТС, Перевозчик DVDRip, Перевозчик HDRip Будут тоже беспощадно удаляться. Любое удаление без участия человека будет обречено удалить не то и не так.

Если же хочется как-то автоматизировать, то стоит присмотреться к ПХПшной функции нахождения расстояния левенштейна и к такой ее реализации:
PHP код:
function _levenshtein($str1$str2) {
    return 
1-levenshtein($str1$str2)/max(strlen($str1), strlen($str2));

Где $str1 - название новой новости, а в $str2 подставлять все уже существующие названия. Если функция вернет величину больше 25, то отправлять на проверку модераторам. Функция правда тяжеловесная и обрабатывать данные будет долго.
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ