Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

Небольшие заметки о html, css, sql, php

Модератор: Valery

Аватара пользователя
Valery

DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск Великовод форума Водкомоторный сплав Лава 2016
Без группы
Без группы
Сообщения: 20403
На борту с: 07.02.2005
Награды: 5
Репутация: 592
Из: Тридевятое царство

Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#1

Сообщение Valery » 27.06.2013 07:08

Есть таблица в БД - jos_hwdms_media, в поле source прописываются данные внешнего видео, если видео локальное - то значение Null.
Т.е. уникальным полем source быть не может. А коли не может - возможны дублирования контента, которые нах не нужны.
Если бы было поле source уникальным - при добавлении данных, которые там уже есть - была бы какая-нибудь ошибка, но данные не добавлялись.
  Как вариант - выбрать дубли, и по бОльшему значению их удалить, например командй cron сервера, только надо посмотреть в какие таблицы прописываются связанные данные.
Akwa (голова) набросал запрос для выбора дублей:

Код: Выделить всё

SELECT jos_hwdms_media.source, jos_hwdms_media.title, jos_hwdms_media.id
FROM jos_hwdms_media
WHERE jos_hwdms_media.source
IN (
SELECT source
FROM jos_hwdms_media
GROUP BY source
HAVING count( source ) >1
)
дубли есть по пустому полю source,
если не надо выводить эти дубли тогда еще условие добавить надо:

Код: Выделить всё

SELECT jos_hwdms_media.source, jos_hwdms_media.title, jos_hwdms_media.id
FROM jos_hwdms_media
WHERE jos_hwdms_media.source
IN (
SELECT source
FROM jos_hwdms_media
GROUP BY source
HAVING count( source ) >1
)
AND jos_hwdms_media.source <> 

По уму оно должно работать как-то так:
1. В форму добавляем ссылку.
2. Сравниваем с данными таблицы jos_hwdms_media.source
3. При отсутствии данных выполняем добавление, если такое значение уже есть:
else
message "Такая строка уже есть!"
end if.
Последний раз редактировалось Valery 13.07.2013 05:51, всего редактировалось 1 раз.
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул – отчитайся, лучшее слово – дело.

Аватара пользователя
Спонсор раздела
Бизнес
Сообщения: 2017
На бору: 03.10.2005
Контакты:

Re: Важное сообщение

Сообщение Спонсор раздела » Пт дек 09, 2011 6:53 am

Аватара пользователя
Akwa

DVD-video Водномоторный выпуск Великовод форума
Водномоторник
Водномоторник
Сообщения: 772
На борту с: 29.10.2008
Награды: 2
Репутация: 50

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#2

Сообщение Akwa » 27.06.2013 07:20

Давай код на инсерт в студию.
можно с обвязкой на ПХП.
а то мухи с котлетами в разных местах лежат... :-[
[time]1372361113[/time] добавил:
Впендюрь в поле sourse чегото вроде 1,2,3,,,,  там чтото около 63 записей.
а потом сделай его ключевым. вот и все решение проблемы.

У тебя там 63 записи в которых сорс пустое...
Может похерить их или филькино уникальное значение присвоить. как там дальше работает я хз...

SELECT jos_hwdms_media.source, jos_hwdms_media.title, jos_hwdms_media.id
FROM jos_hwdms_media
WHERE jos_hwdms_media.source
IN (
SELECT source
FROM jos_hwdms_media
GROUP BY source
HAVING count( source ) >1
)
[time]1372361505[/time] добавил:
Еще вариант - все локальное видео перенести на ю-трубу. Заодно место на хостинге зачистишь и уникальность обеспечишь.
Готов обеспечить широкий канал  O0
После чего поле в таблице делать уникальным и забыть об этой проблеме.
Последний раз редактировалось Akwa 27.06.2013 07:31, всего редактировалось 1 раз.

Аватара пользователя
Valery

DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск Великовод форума Водкомоторный сплав Лава 2016
Без группы
Без группы
Сообщения: 20403
На борту с: 07.02.2005
Награды: 5
Репутация: 592
Из: Тридевятое царство

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#3

Сообщение Valery » 27.06.2013 07:59

Труба не выход. Уникальный контент должен храниться у себя.
По поводу загрузчика - может быть этот файл?
Вложения
upload.rar
(6.94 КБ) 21 скачивание
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул – отчитайся, лучшее слово – дело.

Аватара пользователя
Akwa

DVD-video Водномоторный выпуск Великовод форума
Водномоторник
Водномоторник
Сообщения: 772
На борту с: 29.10.2008
Награды: 2
Репутация: 50

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#4

Сообщение Akwa » 27.06.2013 08:09

неа, там тока один инсерт и то во временнную таблицу... мож там конечно триггер отрабатывает, но маловероятно
[time]1372364332[/time] добавил:
надо искать по ключевым словам:
jos_hwdms_media.source и insert
Последний раз редактировалось Akwa 27.06.2013 08:18, всего редактировалось 1 раз.

Аватара пользователя
Valery

DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск Великовод форума Водкомоторный сплав Лава 2016
Без группы
Без группы
Сообщения: 20403
На борту с: 07.02.2005
Награды: 5
Репутация: 592
Из: Тридевятое царство

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#5

Сообщение Valery » 27.06.2013 08:36

Не ищецо... т.е. нету.
Вот шаблон залива:
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул – отчитайся, лучшее слово – дело.

Аватара пользователя
Akwa

DVD-video Водномоторный выпуск Великовод форума
Водномоторник
Водномоторник
Сообщения: 772
На борту с: 29.10.2008
Награды: 2
Репутация: 50

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#6

Сообщение Akwa » 28.06.2013 12:15

сдается надо вот эту функцию подпилить в файле upload.php
/**
* Method to check if a media key exists
        *
* @since  0.1
*/
        function keyExists($key)
        {
                $db =& JFactory::getDBO();
                $app=& JFactory::getApplication();
                $params = &JComponentHelper::getParams( com_hwdmediashare );

                $query = "
                    SELECT count(*)
                    FROM ".$db->nameQuote(#__hwdms_media)."
                    WHERE ".$db->nameQuote(key)." = ".$db->quote($key).";
                ";


                $db->SetQuery( $query );
                $count = $db->loadResult();

                if (@$params->debug)
                {
                    $app->enqueueMessage(nl2br($db->getErrorMsg()),error);
                    return;
                }

                $exists = ($count > 0 ? true : false);
                return $exists;
        }

тут проверяется уникальность поля key
нужно найти какая переменная отвечает за поле source и добавить аналогичную проверку
мне кажется он лежит в переменной $file
чтото вроде такого
                $query = "
                    SELECT count(*)
                    FROM ".$db->nameQuote(#__hwdms_media)."
                    WHERE ".$db->nameQuote(key)." = ".$db->quote($key)."
                    AND ".$db->nameQuote(source)." = ".$db->quote($file).";
                ";

только этот параметр надо передать в функцию и  в вызов тоже добавить

[time]1372431367[/time] добавил:
вот подумал - поле key и так само по себе достаточно уникально... для многих мильенов записей может и нет, но в данном объеме данных - да.
просто выделенное жирным в первоначальном запросе переписать как проверку source на заначение переменной $file.
соответственно в вызове функции в качаестве параметра передать $file.
в принципе можно аналогичную функцию дописать и соответствующий вызов оформить. надо только убедиться что $file это именно ссылка. пока что это только моя догадка.
предыдущий пост проблему не решает
Последний раз редактировалось Akwa 28.06.2013 02:57, всего редактировалось 1 раз.

Аватара пользователя
Valery

DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск Великовод форума Водкомоторный сплав Лава 2016
Без группы
Без группы
Сообщения: 20403
На борту с: 07.02.2005
Награды: 5
Репутация: 592
Из: Тридевятое царство

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#7

Сообщение Valery » 13.07.2013 06:02

Добавил

Код: Выделить всё

AND ".$db->nameQuote(source)." = ".$db->quote($file).";
ничего не происходит.
Поле key уникальное, но оно генерируется рандомно, т.е. я добавил 2 одинаковые ссылки, а key у них разный.

А как в запросе добавить условие для поля id MAX и удалить эту(и) записи? Т.е. выбрать дубли, которые добавлены позже и грохнуть их.

Код: Выделить всё

SELECT jos_hwdms_media.source, jos_hwdms_media.title, jos_hwdms_media.id
FROM jos_hwdms_media
WHERE jos_hwdms_media.source
IN (
SELECT source
FROM jos_hwdms_media
GROUP BY source
HAVING count( source ) >1
)
AND jos_hwdms_media.source <> 
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул – отчитайся, лучшее слово – дело.

Аватара пользователя
Akwa

DVD-video Водномоторный выпуск Великовод форума
Водномоторник
Водномоторник
Сообщения: 772
На борту с: 29.10.2008
Награды: 2
Репутация: 50

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#8

Сообщение Akwa » 13.07.2013 08:55

Валера, я в отпуске  ->|

Аватара пользователя
Akwa

DVD-video Водномоторный выпуск Великовод форума
Водномоторник
Водномоторник
Сообщения: 772
На борту с: 29.10.2008
Награды: 2
Репутация: 50

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#9

Сообщение Akwa » 16.07.2013 03:27

Валера, а в админке есть отладчик? т.е. хотелось бы посмотреть что именно лежит в переменных. пока что гадание на молоке получается... одни догадки... т.е. хотелось бы нажать "добавить", остановить выполнение скрипта и посмотреть как он выполняется.  в скрипте сейчас есть проверка только на поле key...

Аватара пользователя
Valery

DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск DVD-video Водномоторный выпуск Великовод форума Водкомоторный сплав Лава 2016
Без группы
Без группы
Сообщения: 20403
На борту с: 07.02.2005
Награды: 5
Репутация: 592
Из: Тридевятое царство

Re: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД

#10

Сообщение Valery » 16.07.2013 06:48

Все реализовано в рамках программы: ввел, нажал, получил результат.
Я конечно могу поставить вторую копию сайта для испытаний, но там не будет ничего нового.
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул – отчитайся, лучшее слово – дело.

Ответить

Вернуться в «Сайтостроительство»

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей