Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: MySQL: вычислить одинаковые записи из таблицы
 
 автор: sl1p   (07.04.2011 в 03:23)   письмо автору
 
 

Есть магазин, который постоянно забивается в огромных количествах товарами после парсинга, т.е. без присутствия человека:)

Но, товары могут быть идентичными и различие всеголишь 1 параметр к примеру ширина и т.п.
В магазине предусмотрена такая штука, можно делать какбы несколько товаров в одном.

Вопрос такой, каким образом будет правильно вычислять одинаковые товары?..
Скажем еслибы всё происходило однажды при одноразовой работе скрипта, можно было бы создавать хеши товаров и проверять по ним, дабы не сравнивать каждое поле..
Но здесь товары уже лежат в базе.. Можно конечно сделать аналогично и просто выбирать все товары из базы и тоже строить из них хеши.. но не через "ж" ли это всё?

Что посоветуете?..

  Ответить  
 
 автор: cheops   (07.04.2011 в 09:35)   письмо автору
 
   для: sl1p   (07.04.2011 в 03:23)
 

Нет от чего же, иметь постоянный хэш - это не плохая идея. Вдруг в названии или описании товара закралась ошибка - вы её исправляете и оказывается, что товар можно присоединить к группе других товаров. Готовый хэш (обновляемый при редактировании) в этом случае здорово бы пригодился бы, тем более если вы хотите автоматизировать процедуру объединения товаров.

  Ответить  
 
 автор: sl1p   (07.04.2011 в 13:28)   письмо автору
 
   для: cheops   (07.04.2011 в 09:35)
 

хм, спасибо буду пробывать)

  Ответить  
 
 автор: sl1p   (10.04.2011 в 01:59)   письмо автору
 
   для: cheops   (07.04.2011 в 09:35)
 

а возможно ли както сразу с помощью SQL выбрать записи где хеши одинаковые?

  Ответить  
 
 автор: cheops   (10.04.2011 в 16:12)   письмо автору
 
   для: sl1p   (10.04.2011 в 01:59)
 

Можно просто выбрать записи с одинаковым значением хэша
SELECT * FROM tbl WHERE hash = '...';
По этому же условию можно обновлять записи при мопощи запроса UPDATE.

  Ответить  
 
 автор: sl1p   (11.04.2011 в 02:31)   письмо автору
 
   для: cheops   (10.04.2011 в 16:12)
 

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

1=1
2=2 и т.д.

т.е. изначально не имея хеша

  Ответить  
 
 автор: cheops   (11.04.2011 в 11:45)   письмо автору
 
   для: sl1p   (11.04.2011 в 02:31)
 

Тогда в WHERE-условие нужно поставить выражение вычисляющее кэш. Вы как кэш вычисляете?

  Ответить  
 
 автор: sl1p   (12.04.2011 в 01:50)   письмо автору
 
   для: cheops   (11.04.2011 в 11:45)
 

md5(x.y.z);

  Ответить  
 
 автор: cheops   (12.04.2011 в 07:19)   письмо автору
 
   для: sl1p   (12.04.2011 в 01:50)
 

Тогда используйте (в качестве вычисляемого) выражение вида
MD5(CONCAT(x, y, z))
Можно непосредственно в WHERE-условии, можно добавить его в SELECT-условие, добавить алиас при помощи ключевого слова AS и использовать в WHERE-условии как обычный столбец таблицы.

  Ответить  
 
 автор: sl1p   (12.04.2011 в 10:26)   письмо автору
 
   для: cheops   (12.04.2011 в 07:19)
 

хм, спасибо. Прощу прощения не имею возможности проверить, т.е. я правильно понял это вернет все записи которые встречаются с хешем 2 и более раз?

  Ответить  
 
 автор: cheops   (12.04.2011 в 13:12)   письмо автору
 
   для: sl1p   (12.04.2011 в 10:26)
 

Если вы используете указанный хэш, скажем как-то так, то да
SELECT
  GROUP_CONCAT(id ORDER BY id SEPARATOR ', ') AS id,
  MD5(CONCAT(x, y, z)) AS hash,
  COUNT(*) AS total
FROM tbl
GROUP BY hash
HAVING total > 1

  Ответить  
 
 автор: sl1p   (12.04.2011 в 14:12)   письмо автору
 
   для: cheops   (12.04.2011 в 13:12)
 

Большое спасибо.

  Ответить  
 
 автор: sl1p   (13.04.2011 в 19:02)   письмо автору
 
   для: cheops   (12.04.2011 в 13:12)
 

ещё такой вопрос возник, а как теперь удалить записи так чтобы повторяющиеся остались в одном экземпляре?..

  Ответить  
 
 автор: cheops   (13.04.2011 в 19:48)   письмо автору
 
   для: sl1p   (13.04.2011 в 19:02)
 

Возможно вас заинтересует тема по ссылке http://softtime.ru/forum/read.php?id_forum=3&id_theme=79267.

  Ответить  
 
 автор: sl1p   (13.04.2011 в 21:39)   письмо автору
 
   для: cheops   (13.04.2011 в 19:48)
 

о это гуд. Благодарю.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования