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

Форум водкомоторников и водномоторников – катера, лодки, лодочные моторы, мотоциклы, путешествия, мототуризм, фото видео съемка видеомонтаж

 Последние фотографии:
boat_1s.jpg Снимок.JPG фото 1.jpg Водкоконькобежцы.jpg Полярники.jpg Gilbert_на_буксире.jpg

Автор Тема: Запрос на выбор повторяющихся записей и удаление дублей и таблицы БД  (Прочитано 1225 раз)

Описание:

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 029
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
 Есть таблица в БД - 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.
« Последнее редактирование: 13.07.2013, 08:51 от Valery »
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Онлайн Спонсор раздела

Re:
«Ответ #01 : »

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
Давай код на инсерт в студию.
можно с обвязкой на ПХП.
а то мухи с котлетами в разных местах лежат... :-[

27.06.2013, 22:25 добавил:
Впендюрь в поле 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
)

27.06.2013, 22:31 добавил:
Еще вариант - все локальное видео перенести на ю-трубу. Заодно место на хостинге зачистишь и уникальность обеспечишь.
Готов обеспечить широкий канал  O0
После чего поле в таблице делать уникальным и забыть об этой проблеме.
« Последнее редактирование: 27.06.2013, 22:31 от Akwa »

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 029
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
Труба не выход. Уникальный контент должен храниться у себя.
По поводу загрузчика - может быть этот файл?
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
неа, там тока один инсерт и то во временнную таблицу... мож там конечно триггер отрабатывает, но маловероятно

27.06.2013, 23:18 добавил:
надо искать по ключевым словам:
jos_hwdms_media.source и insert
« Последнее редактирование: 27.06.2013, 23:18 от Akwa »

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 029
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
 Не ищецо... т.е. нету.
 Вот шаблон залива:
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
сдается надо вот эту функцию подпилить в файле 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).";
                ";

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


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

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 029
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
Добавил
 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

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
Валера, а в админке есть отладчик? т.е. хотелось бы посмотреть что именно лежит в переменных. пока что гадание на молоке получается... одни догадки... т.е. хотелось бы нажать "добавить", остановить выполнение скрипта и посмотреть как он выполняется.  в скрипте сейчас есть проверка только на поле key...

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 029
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
 Все реализовано в рамках программы: ввел, нажал, получил результат.
 Я конечно могу поставить вторую копию сайта для испытаний, но там не будет ничего нового.
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн klerk

  • водКомоторник
  • *******
  • Сообщений: 2 127
  • Спасибо +109/-0
  • Из: Сестрорецк
я конечно, ни буя в этом не понимаю :o , но...
не вижу повода не выпить!
Корвет 500 НТ  и Mercury F 60 EFI
Дело не в желании, не в умении, дело вообще не в чём, дело просто в ...........

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
ничего нового не нужно. нужен отладчик. и всегото.
если хостер отладчик не дает, то и копия не нужна  ;D :-[

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 029
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
Я хз что это за отладчик...
Хостер все дает, надо только сформулировать.
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

Оффлайн Akwa

  • капитан
  • *****
  • Сообщений: 769
  • Спасибо +49/-1
  • Награды Великовод форума DVD-video Водномоторный выпуск №3 2011г.
отладчик - это когда в строчке скрипта ставишь остановку, а потом по шагам смотришь выполнение проги.
все как в акцессе, ничего нового на этот счет в плане отладки не придумано...

Оффлайн Valery

  • Без группы ♆
  • водКомоторник
  • *******
  • Сообщений: 19 029
  • Спасибо +536/-4
  • Награды Водкомоторный сплав Лава 2016 Великовод форума DVD-video Водномоторный выпуск №3 2011г. DVD-video Водномоторный выпуск №1 2009г. DVD-video Водномоторный выпуск №2 2010г.
  • Из: Königsberg
  • Корабль:
 Наверное это в строке скрипта надо ставить остановку и смотреть что-то где-то - хостер тут не при делах.
 Я локальную копию тестирую на OpenServer.
 Либо смотреть похожие решения у других разработчиков - хз тут как оно правильнее...
Полусамопал: пластик + фанера = "Adrenaline" 5,6х2,1. По суше: Triumph Tiger 800, велосипед и Land Rover Defender.
Отдохнул - отчитайся, лучшее слово - дело.

  Теги:
 

Глобальный поиск портала

Онлайн кино HD


«Переход водкомоторников через Альпы»

]]>
↑ На палубу ↓ В трюм