- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
По конец недели что-то голова совсем не варит :)
Есть таблица.
Есть одно поле, записи вида
9d0aaa521с75e97fb6c01cffe015cd11
0fbbd14с91d5032e57cb38013a08c793
0fbbd14с91d5032e57cb38013a08c793
6d32537c6c490886f346706782c638b0
но часть записей неуникальна.
Задача уникализировать эти записи, затронув наименьшее кол-во строк.
Т.е. исправить только неуникальные записи. (Желательно с выводом id исправленных строк)
Как исправлять - неважно, хоть id припишу.
Нагородить скрипт с циклами можно, но может кто подскажет более элегантное решение?
Каким-нибудь "волшебным" запросом к таблице.
WHERE id IN (
SELECT id FROM list
GROUP BY id HAVING count(id) > 1)
добавит два случайных числа к id
добавит два случайных числа к id
Во первых, не добавит, потому что апдейт таблицы на которую в этом же запросе делаешь селект - недопустим.
Во вторых, операцией сложения Вы прибили вообще информацию в хэшах.
По конец недели что-то голова совсем не варит :)
Есть таблица.
Есть одно поле, записи вида
но часть записей неуникальна.
Задача уникализировать эти записи, затронув наименьшее кол-во строк.
Т.е. исправить только неуникальные записи. (Желательно с выводом id исправленных строк)
Как исправлять - неважно, хоть id припишу.
Нагородить скрипт с циклами можно, но может кто подскажет более элегантное решение?
Каким-нибудь "волшебным" запросом к таблице.
Если предположить что у Вас есть уникальный ID (который легко создать просто добавление поля с автоинкриментом, даже если его нет)
Если нужны хэши, можно обернуть concat_ws в md5 понятное дело. Можно даже "посолить" хэши ИД-шником.
1) это где нельзя, в MySQL?
2) операцией сложения добавил к каждой неуникальной строке 2 случайных цифры. или что вы имеете ввиду под "прибил" ?
1) Да. Читайте субж, речь про mysql
2) Операция сложения работает так: 0fbbd14с91d5032e57cb38013a08c793+2 = 2 , поэтому он не прибавит уникальное число к хэшу, а прибьет хэш и пропишет на его место случайное значение от 0 до 100 (что в случае более чем 100 строк гарантированно даже не сделает поле уникальным).
но вообще-то да, неправильно написал, он прибавит к каждой неуникальной :-(, а надо только к одной
ваш update, кстати, тем же болеет ;-)
вот так будет правильнее
Наш действительно был слегка неверный, Вы правы, сейчас поправили.
Но
тоже не верно, т.к. одинаковых хэшей может быть больше 1. Правильнее работать напрямую с хэшами при выборке.Во первых, не добавит, потому что апдейт таблицы на которую в этом же запросе делаешь селект - недопустим.
Во вторых, операцией сложения Вы прибили вообще информацию в хэшах.
1) это где нельзя, в MySQL?
2) операцией сложения добавил к каждой неуникальной строке 2 случайных цифры. или что вы имеете ввиду под "прибил" ?
---------- Добавлено в 18:31 ---------- Предыдущее сообщение было в 18:23 ----------
но вообще-то да, неправильно написал, он прибавит к каждой неуникальной :-(, а надо только к одной
ваш update, кстати, тем же болеет ;-)
вот так будет правильнее
Инфа в хеше тут значения не имеет, можно ...c793+2 = c7932
Сначала выберу строки с неуник значениями
закину id в массив, затем циклом обновлю hash.
iopiop, edogs, спасибо, что пнули в нужном направлении. :)
не получится если больше 2 неуникальных значений, edogs правильно написал последний вариант
вернее получится, но через вложенный селект
SELECT id, hach FROM tbl WHERE hash IN (SELECT hash FROM tbl GROUP BY hash HAVING COUNT(*) > 1);