php - mysqlでの結合操作とともに、3つの列(city + streetaddress + state)の値に基づいて類似の住所レコードを選択します

原文 php mysql sql join group-by

"SELECT family.* ,charity.charityName FROM family join charity WHERE charity.user_id = family.createdby AND family.streetAddress in (SELECT family.streetAddress FROM family GROUP BY family.city,family.streetAddress HAVING count(*) > 1 AND ) ORDER BY family.streetAddress ASC LIMIT $offset,$limit"

このクエリは、画像に示すように次の結果を生成します

https://drive.google.com/file/d/0B3RNacAE6rR5Rk8tUUI2Q3B3X3M/view?usp=sharing

青いマークは、来るべきではない問題の記録です。

上記のクエリは、類似の住所を持つすべてのレコードをリストしますが、類似の住所と市を持つレコードのみを取得できませんでした。同じ市区町村と番地のレコードのみを取得する必要があります。 groupbyに適用する方法とロジックはありますか
答え
メインセレクトのWHERE句は、一致する住所のみをチェックします。

AND family.streetAddress in (....)


これは、間違った都市に属している場合でも、サブセレクトで見つかった住所と一致します。副選択は現在、住所のみを返し、一致する都市は返しません。それが問題です。

これで問題が解決するかどうかはわかりませんが、副選択をネストされたテーブル式に変更して、住所と都市の両方で一致させることができます。多分何かの線に沿って

SELECT family.* --and other main select stuff
WHERE charity.user_id = family.createdby 
AND exists --similar to count(*) > 1

select streetAddress, city 
from (
    (SELECT family.streetAddress, family.city 
        FROM family 
        GROUP BY family.city,family.streetAddress 
        HAVING count(*) > 1) AS subSelect
) 
WHERE family.streetAddress = subSelect.streetAddress 
    AND family.city = subSelect.city
関連記事

php - mod_rewrite:複数のパラメーターを持つフォームURLを短いパラメーターに変換します(中間部分なし)

php - 更新時の検証の誤動作

php - このMySQL外部選択がクエリの速度を低下させる理由を理解する

php - Modxのユーザー拡張フィールドにデフォルト値を設定する

php - PHP / MySQLiの複数のSQLオブジェクト

php - CentOSにPHP FileInfoモジュールをインストールする方法

php - データベースから取得した文字列Null

php - HtmlPurifierBundle config.yml Symfony2でURI.SafeIframeRegexpを構成する方法

php - mysqlはローカルdbプロジェクトのスキーマを使用して、phpで新しいdbを作成するときにdb構造を作成します

php - Functions.phpでメニューCSSワードプレスをオーバーライドする