2012-01-04 6 views
0

私は面白い状況があります - 私たちのシステムには複数のプロパティがあり、それらのいくつかは同じアドレスを共有しています。したがって、number列とstreet列の値が一致する場合(文字列のプロセッサとしてLOWER()を使用します)、これらの行のIDが必要です。また、一致していない行を除外する必要があります。MySQLの同じ列フィールドを持つ行のIDを取得する

問題は、私が理解しているように、GROUP BYコマンドを使用すると、基準に一致する各家庭の行のIDを取得できないということです。もちろん、すべてのアドレスコンボを配列に格納したPHPスクリプトを作成し、IDを再グループ化するために重複を選ぶこともできますが、もっと簡単な方法が必要です。私が持っている

これまでMySQLのクエリは

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

である。しかし、それは動作しません...私は私が正しくCNT> 1つの部分を使用しているかはわかりません。

EDIT:

ここに私のテーブルには、あなたがmysql group_concat機能の集約とidを保つことができる

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 

答えて

3

(DESC homes結果)のように見える方法は次のとおりです。私は100%を確認していない

SELECT 
    COUNT(*) as cnt, 
    group_concat(cast(Id as char)) as ids 
FROM 
    homes 
GROUP BY 
    number, street 
HAVING 
    COUNT(*) > 1 
+1

@jeffkee:Xが正方形を取得するように見えます。 +1! – RolandoMySQLDBA

+0

私はこれで非常に奇妙な結果が得られます。 [BLOB - 34B] [BLOB - 14B] [BLOB - 9B] – jeffkee

+0

@jeffkee、あなたはあなたのポストでの 'のDescr homes'を公開することができます(完了したら私に警告する)? – danihp

0

あなたが望むものだが、あなたのデータベースに重複した住居があるように聞こえ、「ナンバー」と「ストリート」が別のものと一致すると、それが重複しているかどうかを知ることができる行。

ので、私はこれを行う希望の場合:

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) 

内側のSELECT文は、「数//ストリート」として(現在の1を除く)すべての行を返します。現在の行の "number // street"が内部select文の値と一致する場合、これは重複しています。私は最後にidまたはmasteridがあなたの主なid値であるかどうか分からなかった。それは「2 //例」と「23 //例を」比較の代わりに、「23exampleを使用して

id  number   street 
1  23    example 
2  2    3example 

は同じです:あなたはこれらの2つの行を考えてクエリを得ることはありませんので、'//'は、一意の文字列であります"

+0

重複していない - いくつかのタウンハウス/アパートには同じ住所がありますが、単位は異なります。 masteridは完全にここの方程式から外れています - それは完全に忘れてください(それは無関係な全く別の目的です)。だから私は#111 - 123メインストリート、#305 - 123メインストリート、#888 - 123メインストリートを持っているとしましょう、私はこれらの家のIDとストリート名と番号が必要です。オハイオ州私はまた、同じ都市にいる必要があることを言及していないことを忘れていた(いくつかの通りの名前はここに市町村を渡って重複している..)しかし、私は基本的な構造を取得した後に簡単にWHERE句を追加することができます。 – jeffkee

+0

これはどのように機能しますか? – Kyra

+0

番号/通りの組み合わせが唯一ではあるものの、いくつかの行があります。 – jeffkee

関連する問題