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」っぽいので
※正確な計算量は分かりません…時間を見つけて勉強します。
処理速度は向上します。しました。ロジックで高速化?(伏線回収)
もっと良い方法があれば良いのですが、取り敢えずの対応でした。
以前は検索結果に色々出てきた気がしてたんですが、ここ数ヶ月グーグル先生の解答は同じような内容の物ばかりで質が下がって来てる気が。。。?
関連記事
-
jQuery Googleカレンダー風スケジュール表 タイムテーブル
jQueryでスケジュール表もしくはタイムテーブルっぽいもの 仕事でスケジュール管理のシステム開発
-
Macで ローカルサーバー構築 PHP設定編
Macで ローカルサーバー環境を構築するまで PHP設定編 ネットでの情報は必要最低限しか載ってな
-
jQuery 水平スクロール&cssでカスタム可能なスクロールバーなプラグイン
水平スクロール&cssでカスタム可能なスクロールバーなプラグイン jQueryを使ったプラグインは
-
PHPでIE11ユーザーエージェント判定
IE11のユーザーエージェント判定 自作のユーザーエージェント判定クラスでIEの判定が出来てなかっ
-
Androidで課金アプリ作製 定期購読サンプルコード編
Androidで課金アプリ作製 定期購読編 In-app Billing v3を使用したアプリ開発
-
jQuery draggable,resizable 要素のサイズがずれる
uiプロパティ以外で要素のサイズ取得を試みる draggableとresizableを使用し要素の
-
jQuery Google画像検索風プラグイン
Google画像検索風プラグイン rc_gallery_open こういったプラグインは数多の開
-
jQuery removeClass 特定のクラスを全て削除
特定のクラスを全て削除 フォームを作成した時に、入力項目に不備があった場合は目立つ様にinput属
-
Macで ローカルサーバー構築 Apache設定編
Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載
-
Macで ローカルサーバー構築 Apache起動編
Macで ローカルサーバー環境を構築するまで Apache起動編 ネットでの情報は必要最低限しか載
- PREV
- グレイスラム CORCOR
- NEXT
- jQuery removeClass 特定のクラスを全て削除