*

PHP MySQL 重複行を抽出 ロジックで高速化

公開日: : 最終更新日:2014/07/01 MySQL, PHP, 開発

PHP MySQL 重複行を抽出 ロジックで高速化

ロジックで高速化は釣りになっているかもしれませんが、悪意は有りませんのでご了承下さい…(;´∀`)
php5.3系
mysql5.*系

グーグル先生に聞くと、重複行の抽出方法のほとんどはこれ

重複行の抽出方法

SELECT * FROM user WHERE name IN (SELECT name FROM user GROUP BY name HAVING count(name) > 1);

若しくはユニーク制約をするとか、間違いでは無いのですが珍回答とか見かけます。
ユニーク制約を設ける事ができない場合はどうするつもりなんでしょうか…?

数件の場合はこれでいいかも知れませんが、sqlの計算量は「n^2」っぽいので
※正確な計算量は分かりません…時間を見つけて勉強します。
数万行になると、とんでもになります。なりました。

ロジックで解消

一度に取得する必要が無いのなら

・重複行を抽出

SELECT name FROM user GROUP BY name HAVING count(name) > 1;

・抽出した行を元に再度sqlを組み立てる

$fields= array();
// $data 重複する行を抽出した結果
foreach ($data as $key => $value) {
	$fields[] = sprintf('name = "%s"', $value['name']);
}
$sql = sprintf("SELECT * FROM user WHERE (%s);", implode(" || ", $fields));

この場合だとsqlの計算量は「2n」っぽいので
※正確な計算量は分かりません…時間を見つけて勉強します。
処理速度は向上します。しました。ロジックで高速化?(伏線回収)

もっと良い方法があれば良いのですが、取り敢えずの対応でした。
以前は検索結果に色々出てきた気がしてたんですが、ここ数ヶ月グーグル先生の解答は同じような内容の物ばかりで質が下がって来てる気が。。。?

関連記事

server_error_500

Apache 500 Internal Server Error

久しぶりに自宅のローカルサーバーを動かしたら「Server error!」が出てゑっ!? 解決方法

記事を読む

php-logo

PHPで指定日の祝日を取得する方法 GoogleAPI利用

google APIを利用して指定日が祝日かどうか取得する 技術的な内容を書く場合は載せてるコード

記事を読む

droid

Androidで課金アプリ作製 プロセス間通信予習編

Androidで課金アプリ作製 プロセス間通予習編 課金アプリを作成の際にaidlファイルを利用す

記事を読む

cs06d2.PNG

Androidで課金アプリ作製 サンプルコード(BILLING V3) 起動編

Androidで課金アプリ作製 サンプルコード起動編 課金アプリの制作の機会が来てしまいました。

記事を読む

PHP 5.4.17

Macで ローカルサーバー構築 PHP設定編

Macで ローカルサーバー環境を構築するまで PHP設定編 ネットでの情報は必要最低限しか載ってな

記事を読む

jquery-logo_png

jQuery Google画像検索風プラグイン

Google画像検索風プラグイン rc_gallery_open こういったプラグインは数多の開

記事を読む

Mac ネットワークユーティリティ

Macで ローカルサーバー構築 ローカルネットワーク参加編

Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載

記事を読む

jquery-logo_png

jQuery draggable,resizable 要素のサイズがずれる

uiプロパティ以外で要素のサイズ取得を試みる draggableとresizableを使用し要素の

記事を読む

PHP-icon

PHP substr エスケープ処理で文字化け

PHP substr 文字化け mb_substrで文字コードを合わせて切り取ればOKって記事は沢

記事を読む

droid

Google Cloud Messaging プロジェクトナンバー API Key取得編 2014/07最新版

Google Cloud Messaging プロジェクトナンバー APK取得編 コンソールの仕様

記事を読む

jquery-logo_png
jQuery 水平スクロール&cssでカスタム可能なスクロールバーなプラグイン

水平スクロール&cssでカスタム可能なスクロールバーなプラグイン j

c
C言語 バッファオーバーランまで 関数の引数ポインタ

関数引数としてのポインタ 今回は関数引数としてのポインタに関して。

c2
C言語 バッファオーバーランまで ポインタ考察編

趣旨 ただC言語を勉強してもモチベーションがあがり辛いので、 取り

droid
Google Cloud Messaging プロジェクトナンバー API Key取得編 2014/07最新版

Google Cloud Messaging プロジェクトナンバー A

jquery-logo_png
jQuery removeClass 特定のクラスを全て削除

特定のクラスを全て削除 フォームを作成した時に、入力項目に不備があっ

→もっと見る

PAGE TOP ↑