Вернуться   Форум об интернет-маркетинге > >
Ответ
 
Опции темы
Старый 12.06.2019, 09:35   #1
Академик
 
Регистрация: 28.06.2008
Сообщений: 6,902
Репутация: 390201

По умолчанию Поиск дублей без группировки?

Нужно в таблице content найти дубли по полю title и вывести ID этих дублей.
В идеале так:

1,17,5;
2,14;
55,89,13,74;
......

Так можно?
Dram вне форума   Ответить с цитированием

Реклама
Старый 12.06.2019, 12:02   #2
ivan-lev
Академик
 
Регистрация: 20.04.2007
Сообщений: 3,716
Репутация: 843865

По умолчанию Re: Поиск дублей без группировки?

Код:
SELECT title, count(id) as cnt 
FROM content 
GROUP BY title
HAVING count(id)>1 ORDER by 2 DESC
Выведет Title-ы с двумя и более количествами.

А что-то вроде этого выведет ID и Title записей с дублирующимися Title

Код:
SELECT id, title FROM content WHERE title IN (
SELECT title FROM `content` 
GROUP BY title 
HAVING count(id) > 1)
ORDER BY title
__________________
.. :)
ivan-lev вне форума   Ответить с цитированием
Сказали спасибо:
Старый 12.06.2019, 16:44   #3
Dram
Академик
 
Регистрация: 28.06.2008
Сообщений: 6,902
Репутация: 390201

ТопикСтартер Re: Поиск дублей без группировки?

Не может мускуль переварить запрос, зависает, в базе всего 2500 записей.
Решил попробовать на пхп но че то завис, не мойму как элементы массива сравнивать.

Цитата:
$db->setQuery("SELECT id,title FROM `content`");
$result = $db->loadObjectlist();

foreach ($result as $item){
var_dump($item->title);
}
Мне нужно сравнить title и если они одинаковые высети их как то отельно, в отдельный массив.

например было
1 Вася
2 Петя
3 Игорь
4 Вася
5 Артем
6 Петя

сделать
array1 {
1 Вася
4 Вася
}
array2 {
2 Петя
6 Петя
}
array3 {
3 Игорь
}
array4 {
5 Артем
}
Dram вне форума   Ответить с цитированием
Старый 12.06.2019, 16:47   #4
edogs
Писать: search@ник_тут.ru
 
Аватар для edogs
 
Регистрация: 16.12.2005
Адрес: St.Petersburg, Russia
Сообщений: 7,761
Репутация: 92299
Отправить сообщение для edogs с помощью Skype™

По умолчанию Re: Поиск дублей без группировки?

Цитата:
Сообщение от Dram Посмотреть сообщение
Нужно в таблице content найти дубли по полю title и вывести ID этих дублей.
В идеале так:

1,17,5;
2,14;
55,89,13,74;
......

Так можно?
Что-то типа
select title, group_concat ( id separator ',' ) from content group by title having count(*)>1
__________________
Разработка проектов связанных с криптовалютой. Разумные цены. Хорошее качество. Адекватный подход.
Ищем админа на сервер, в личку: цену установки vdsmanager на hetzner и расстановку ИП.
edogs вне форума   Ответить с цитированием
Старый 12.06.2019, 16:49   #5
Dram
Академик
 
Регистрация: 28.06.2008
Сообщений: 6,902
Репутация: 390201

ТопикСтартер Re: Поиск дублей без группировки?

edogs, #1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около 'separator ',' )
Dram вне форума   Ответить с цитированием
Старый 12.06.2019, 17:42   #6
~AL~
Аспирант
 
Регистрация: 27.06.2009
Сообщений: 183
Репутация: 99914

По умолчанию Re: Поиск дублей без группировки?

Цитата:
Сообщение от Dram Посмотреть сообщение
Не может мускуль переварить запрос, зависает, в базе всего 2500 записей.
Решил попробовать на пхп но че то завис, не мойму как элементы массива сравнивать.



Мне нужно сравнить title и если они одинаковые высети их как то отельно, в отдельный массив.

например было
1 Вася
2 Петя
3 Игорь
4 Вася
5 Артем
6 Петя

сделать
array1 {
1 Вася
4 Вася
}
array2 {
2 Петя
6 Петя
}
array3 {
3 Игорь
}
array4 {
5 Артем
}
http://sandbox.onlinephpfunctions.co...46106a4bbde0f9
~AL~ вне форума   Ответить с цитированием
Сказали спасибо:
Старый 12.06.2019, 17:52   #7
Dram
Академик
 
Регистрация: 28.06.2008
Сообщений: 6,902
Репутация: 390201

ТопикСтартер Re: Поиск дублей без группировки?

~AL~, что-то не получается переделать ваш код под мой массив, он у меня так выглядит

Цитата:
array(2852) {
[0]=>
object(stdClass)#307 (2) {
["id"]=>
string(1) "1"
["title"]=>
string(86) "вася"
}
[1]=>
object(stdClass)#308 (2) {
["id"]=>
string(1) "2"
["title"]=>
string(91) "вася"
}
[2]=>
object(stdClass)#309 (2) {
["id"]=>
string(1) "3"
["title"]=>
string(98) "Петя"
}
[3]=>
object(stdClass)#310 (2) {
["id"]=>
string(1) "4"
["title"]=>
string(90) "Петя"
}
Dram вне форума   Ответить с цитированием
Старый 12.06.2019, 17:55   #8
~AL~
Аспирант
 
Регистрация: 27.06.2009
Сообщений: 183
Репутация: 99914

По умолчанию Re: Поиск дублей без группировки?

Цитата:
Сообщение от Dram Посмотреть сообщение
~AL~, что-то не получается переделать ваш код под мой массив, он у меня так выглядит
Код:
$db->setQuery("SELECT id,title FROM `content`");
$result = $db->loadObjectlist();

$duplicates = [];

foreach ($result as $item) {
    $duplicates[$item->title][$item->id] = $item->title;
}
Наверное так
~AL~ вне форума   Ответить с цитированием
Сказали спасибо:
Старый 12.06.2019, 17:57   #9
Dram
Академик
 
Регистрация: 28.06.2008
Сообщений: 6,902
Репутация: 390201

ТопикСтартер Re: Поиск дублей без группировки?

То что нужно СПАСИБО!
Dram вне форума   Ответить с цитированием
Старый 12.06.2019, 23:32   #10
edogs
Писать: search@ник_тут.ru
 
Аватар для edogs
 
Регистрация: 16.12.2005
Адрес: St.Petersburg, Russia
Сообщений: 7,761
Репутация: 92299
Отправить сообщение для edogs с помощью Skype™

По умолчанию Re: Поиск дублей без группировки?

Цитата:
Сообщение от Dram Посмотреть сообщение
edogs, #1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около 'separator ',' )
group_concat - после него пробел не надо.
edogs вне форума   Ответить с цитированием
Сказали спасибо:
Ответ



Опции темы

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


Регистрация Справка Календарь Поддержка Все разделы прочитаны