PHP MySQL 重複行を抽出 ロジックで高速化
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」っぽいので
※正確な計算量は分かりません…時間を見つけて勉強します。
処理速度は向上します。しました。ロジックで高速化?(伏線回収)
もっと良い方法があれば良いのですが、取り敢えずの対応でした。
以前は検索結果に色々出てきた気がしてたんですが、ここ数ヶ月グーグル先生の解答は同じような内容の物ばかりで質が下がって来てる気が。。。?
関連記事
-
-
Macで ローカルサーバー構築 Postfix基本編
Macで ローカルサーバー環境を構築するまで Apache起動編 ネットでの情報は必要最低限しか載
-
-
Androidで課金アプリ作製 サンプルコード(BILLING V3) 起動編
Androidで課金アプリ作製 サンプルコード起動編 課金アプリの制作の機会が来てしまいました。
-
-
jQuery draggable,resizable 要素のサイズがずれる
uiプロパティ以外で要素のサイズ取得を試みる draggableとresizableを使用し要素の
-
-
Macで ローカルサーバー構築 ローカルネットワーク参加編
Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載
-
-
jQuery 要素の相対位置
jQueryを使って要素の相対位置を調べる Google先生に「jquery offsetLeft
-
-
PHPで指定日の祝日を取得する方法 GoogleAPI利用
google APIを利用して指定日が祝日かどうか取得する 技術的な内容を書く場合は載せてるコード
-
-
C言語 バッファオーバーランまで ポインタ考察編
趣旨 ただC言語を勉強してもモチベーションがあがり辛いので、 取り合えずバッファオーバーランを目
-
-
Androidで課金アプリ作製 エラー編(-1008:Unknown error)
Androidで課金アプリ作製 エラー編 In-app Billing v3を使用したアプリ開発で
-
-
jQuery Google画像検索風プラグイン
Google画像検索風プラグイン rc_gallery_open こういったプラグインは数多の開
-
-
Macで ローカルサーバー構築 PHP設定編
Macで ローカルサーバー環境を構築するまで PHP設定編 ネットでの情報は必要最低限しか載ってな
- PREV
- グレイスラム CORCOR
- NEXT
- jQuery removeClass 特定のクラスを全て削除
