|
|
|
| Есть магазин, который постоянно забивается в огромных количествах товарами после парсинга, т.е. без присутствия человека:)
Но, товары могут быть идентичными и различие всеголишь 1 параметр к примеру ширина и т.п.
В магазине предусмотрена такая штука, можно делать какбы несколько товаров в одном.
Вопрос такой, каким образом будет правильно вычислять одинаковые товары?..
Скажем еслибы всё происходило однажды при одноразовой работе скрипта, можно было бы создавать хеши товаров и проверять по ним, дабы не сравнивать каждое поле..
Но здесь товары уже лежат в базе.. Можно конечно сделать аналогично и просто выбирать все товары из базы и тоже строить из них хеши.. но не через "ж" ли это всё?
Что посоветуете?.. | |
|
|
|
|
|
|
|
для: sl1p
(07.04.2011 в 03:23)
| | Нет от чего же, иметь постоянный хэш - это не плохая идея. Вдруг в названии или описании товара закралась ошибка - вы её исправляете и оказывается, что товар можно присоединить к группе других товаров. Готовый хэш (обновляемый при редактировании) в этом случае здорово бы пригодился бы, тем более если вы хотите автоматизировать процедуру объединения товаров. | |
|
|
|
|
|
|
|
для: cheops
(07.04.2011 в 09:35)
| | хм, спасибо буду пробывать) | |
|
|
|
|
|
|
|
для: cheops
(07.04.2011 в 09:35)
| | а возможно ли както сразу с помощью SQL выбрать записи где хеши одинаковые? | |
|
|
|
|
|
|
|
для: sl1p
(10.04.2011 в 01:59)
| | Можно просто выбрать записи с одинаковым значением хэша
SELECT * FROM tbl WHERE hash = '...';
| По этому же условию можно обновлять записи при мопощи запроса UPDATE. | |
|
|
|
|
|
|
|
для: cheops
(10.04.2011 в 16:12)
| | нет имеется ввиду чтобы база сама вычислила где одинаковые записи, скажем нужно выбрать все записи у которых хеши совпадают между собой, скажем это
1=1
2=2 и т.д.
т.е. изначально не имея хеша | |
|
|
|
|
|
|
|
для: sl1p
(11.04.2011 в 02:31)
| | Тогда в WHERE-условие нужно поставить выражение вычисляющее кэш. Вы как кэш вычисляете? | |
|
|
|
|
|
|
|
для: cheops
(11.04.2011 в 11:45)
| | md5(x.y.z); | |
|
|
|
|
|
|
|
для: sl1p
(12.04.2011 в 01:50)
| | Тогда используйте (в качестве вычисляемого) выражение вида
Можно непосредственно в WHERE-условии, можно добавить его в SELECT-условие, добавить алиас при помощи ключевого слова AS и использовать в WHERE-условии как обычный столбец таблицы. | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 07:19)
| | хм, спасибо. Прощу прощения не имею возможности проверить, т.е. я правильно понял это вернет все записи которые встречаются с хешем 2 и более раз? | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 13:12)
| | Большое спасибо. | |
|
|
|
|
|
|
|
для: cheops
(12.04.2011 в 13:12)
| | ещё такой вопрос возник, а как теперь удалить записи так чтобы повторяющиеся остались в одном экземпляре?.. | |
|
|
|
|
|
|
|
|
для: cheops
(13.04.2011 в 19:48)
| | о это гуд. Благодарю. | |
|
|
|