Получить идентификаторы строк с одинаковыми полями столбцов в MySQL - PullRequest
0 голосов
/ 05 января 2012

У меня интересная ситуация - у меня несколько свойств в нашей системе, некоторые из них имеют один и тот же адрес.Поэтому, если столбец number, а также столбец street совпадают по значению (я буду использовать LOWER () в качестве процессора для столбцов строк), я хочу идентификаторы этих строк.ТАКЖЕ мне нужно исключить строки, которые не имеют совпадений.

Проблема в том, что, насколько я понимаю, если я использую команду GROUP BY, она не будет извлекать идентификаторы каждой строки домов, которые соответствуют критериям. Какая у меня альтернатива?Конечно, я мог бы написать PHP-скрипт, который хранит все комбинации адресов в массиве, а затем выбрать дубликаты для повторной группировки идентификаторов, но я надеюсь, что есть более простой способ.

Пока что у меня есть запрос MySQL

SELECT COUNT(*) as cnt, id FROM homes GROUP BY number, street WHERE cnt>1

Но он НЕ работает ... Я не уверен, правильно ли я использую часть cnt> 1.

РЕДАКТИРОВАТЬ:

Вот как выглядит моя таблица (результат homes)

SQL query: desc homes; 
Rows: 72
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
masterid int(11) NO NULL
source int(11) NO MUL 0
firm_1 varchar(255) NO NULL
firm_2 varchar(255) NO NULL
firm_1_id varchar(255) NO MUL NULL
firm_2_id varchar(255) NO NULL
firm_phone_1 varchar(255) NO NULL
firm_phone_2 varchar(255) NO NULL
firm_fax_1 varchar(255) NO NULL
firm_fax_2 varchar(255) NO NULL
realtor_1 varchar(255) NO NULL
realtor_2 varchar(255) NO NULL
realtor_phone_1 varchar(255) NO NULL
realtor_phone_2 varchar(255) NO NULL
create_date datetime NO NULL
modify_date datetime NO NULL
lat varchar(255) NO MUL
long varchar(255) NO MUL
sold varchar(255) NO MUL
feature int(1) NO MUL 0
mls varchar(10) NO MUL
ord decimal(7,2) NO 0.00
type varchar(255) NO MUL 0
building varchar(255) NO
price varchar(255) NO
prevprice varchar(255) NO
showaddress enum('0','1') NO 1
unit varchar(255) NO
number varchar(255) NO
street varchar(255) NO
area varchar(255) NO MUL
city varchar(255) NO MUL
openhouse varchar(255) NO
videolink varchar(255) NO
youtube varchar(255) YES NULL
youtube1 varchar(255) YES NULL
remarks int(11) NO 0
bedroom varchar(255) NO
bathroom varchar(255) NO
sqftup varchar(255) NO
sqftmain varchar(255) NO
sqftdown varchar(255) NO
fullbath varchar(255) NO
halfbath varchar(255) NO
kitchen varchar(255) NO
fireplace varchar(255) NO
parking varchar(255) NO
storage varchar(255) NO
style varchar(255) NO NULL
tax varchar(255) NO
maintenance varchar(255) NO NULL
warranty varchar(255) NO NULL
sqft varchar(255) NO
lot varchar(255) NO
depth varchar(255) NO NULL
rearexposure varchar(255) NO NULL
basement varchar(255) NO NULL
suite varchar(255) NO NULL
view varchar(255) NO NULL
balcony varchar(255) NO NULL
rental varchar(255) NO NULL
construction varchar(255) NO NULL
frontage varchar(255) NO
story varchar(255) NO
year varchar(255) NO
description text NO NULL
description2 text NO NULL
dimension text NO NULL
heading varchar(255) NO
publish enum('0','1') NO MUL 0
views int(11) NO 0

Ответы [ 2 ]

4 голосов
/ 05 января 2012

Вы можете сохранить идентификаторы с помощью mysql group_concat Функция agGregation:

SELECT 
  COUNT(*) as cnt, 
  group_concat( cast(Id as char) ) as ids 
FROM 
  homes 
GROUP BY 
  number, street 
HAVING
  COUNT(*) > 1
0 голосов
/ 05 января 2012

Я не на 100% уверен, что вы хотите, но похоже, что у вас есть дубликаты домов в вашей базе данных, и вы можете сказать, если это дубликат, если «число» и «улица» соответствуют другой строке.

Если это так, я бы сделал это:

select id, unit, number, street 
from homes as h1
where number + '//' + street in 
    (select number + '//' + street from homes as h2 where h2.id <> h1.id and h1.city = h2.city)

Внутренний оператор выбора возвращает все строки (кроме текущей) как "число // улица".Таким образом, вы, если текущая строка «число // улица» соответствует значению во внутреннем операторе выбора, это дубликат.Я не был уверен, является ли id или masterid вашим главным идентификатором в конце.'//' является уникальной строкой, поэтому вы не получите запрос, думая, что эти две строки:

id       number         street
1        23             example
2        2              3example

совпадают, так как вместо этого сравнивается «23 // пример» с «2 // пример»использования "23example".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...