大規模な PHP 配列の重複排除について質問したいのですが
大規模な PHP 配列の操作について質問したいのですが、数百万のデータを含むテーブルを PHP 配列に重複排除する必要があります。例: id 性別 ID カードには 3 つのフィールドがあります。男性と女性が何人いるかをカウントする必要があります (他に固有のロジックがあり、MySQL では削除できません)
実装方法: id は自動インクリメントされます。 ID ごとに 50,000 個のデータが取得されるたびに、配列
$count = array(
' Male' => array(
'ID カード 1' => 1) で重複排除操作を実行します。 ,
'ID カード 2' => 1 ,
....
),
'女性' => 🎜>問題: 配列が大きくなるにつれて、重複排除の速度が遅くなりますどんどん遅くなっていきます。他に解決策や最適化方法があるかどうかはわかりません。
------ソリューションアイデア----------------------
データに従って実行しますあなたが与えたテスト
はそのような結果を取得できます この結果から始めて、SQL で他に何ができないでしょうか?
drop table if exists play;<br /><br />CREATE TABLE `play` (<br /> `id` int(10) unsigned NOT NULL AUTO_INCREMENT,<br /> `time` int(10) NOT NULL,<br /> `uid` int(10) unsigned NOT NULL,<br /> `game` varchar(255) NOT NULL,<br /> `channel` varchar(255) NOT NULL,<br /> `system` varchar(255) NOT NULL,<br /> `screen` varchar(255) NOT NULL,<br /> `network` varchar(255) NOT NULL,<br /> PRIMARY KEY (`id`),<br /> KEY `datetime` (`time`)<br />) charset=gbk;<br /><br />insert into play values<br />(1,1421812389,10000,'所有游戏-魔兽世界-0服','360-360联盟','WIN7','1024x768','电信'),<br />(2,1421812389,10001,'所有游戏-魔兽世界-1服','网易-网易联盟','XP','1366x768','联通'),<br />(3,1421812389,10000,'所有游戏-魔兽世界-0服','360-360联盟','WIN7','1024x768','电信');<br /><br />drop table if exists play_game;<br /><br />create table play_game ( game varchar(100) ) charset=gbk;<br /><br />insert into play_game values ('所有游戏'),('魔兽世界'),('0服'),('1服');<br /><br />drop table if exists play_channel;<br /><br />create table play_channel ( channel varchar(100) ) charset=gbk;<br /><br />insert into play_channel values ('360'),('360联盟'),('网易'),('网易联盟');<br /><br />select a.id, a.time, a.uid, b.game, c.channel, a.system, a.screen, a.network from play a, play_game b, play_channel c where <br /> find_in_set(b.game, replace(a.game, '-', ','))<br /> and<br /> find_in_set(c.channel, replace(a.channel, '-', ','))<br />
<br />id time uid game channel system screen network <br />1 1421812389 10000 所有游戏 360 WIN7 1024x768 电信 <br />3 1421812389 10000 所有游戏 360 WIN7 1024x768 电信 <br />1 1421812389 10000 魔兽世界 360 WIN7 1024x768 电信 <br />3 1421812389 10000 魔兽世界 360 WIN7 1024x768 电信 <br />1 1421812389 10000 0服 360 WIN7 1024x768 电信 <br />3 1421812389 10000 0服 360 WIN7 1024x768 电信 <br />1 1421812389 10000 所有游戏 360联盟 WIN7 1024x768 电信 <br />3 1421812389 10000 所有游戏 360联盟 WIN7 1024x768 电信 <br />1 1421812389 10000 魔兽世界 360联盟 WIN7 1024x768 电信 <br />3 1421812389 10000 魔兽世界 360联盟 WIN7 1024x768 电信 <br />1 1421812389 10000 0服 360联盟 WIN7 1024x768 电信 <br />3 1421812389 10000 0服 360联盟 WIN7 1024x768 电信 <br />2 1421812389 10001 所有游戏 网易 XP 1366x768 联通 <br />2 1421812389 10001 魔兽世界 网易 XP 1366x768 联通 <br />2 1421812389 10001 1服 网易 XP 1366x768 联通 <br />2 1421812389 10001 所有游戏 网易联盟 XP 1366x768 联通 <br />2 1421812389 10001 魔兽世界 网易联盟 XP 1366x768 联通 <br />2 1421812389 10001 1服 网易联盟 XP 1366x768 联通