Php 计算来自大型数据库的结果数
我有两个数据库表,一个有165个条目。对于每一个条目,我都要浏览100万条记录表,看看上面提到的165条记录中的每一条记录有多少次 “赔率提供者”有165个条目,“bettingoffer”有一百万个条目Php 计算来自大型数据库的结果数,php,mysql,database,count,Php,Mysql,Database,Count,我有两个数据库表,一个有165个条目。对于每一个条目,我都要浏览100万条记录表,看看上面提到的165条记录中的每一条记录有多少次 “赔率提供者”有165个条目,“bettingoffer”有一百万个条目 $SQL = "SELECT odds_provider.id AS id, odds_provider.name AS name, COUNT(bettingoffer.odds_providerFK) AS betcount FROM odds_pr
$SQL = "SELECT
odds_provider.id AS id,
odds_provider.name AS name,
COUNT(bettingoffer.odds_providerFK) AS betcount
FROM odds_provider
INNER JOIN
bettingoffer
ON bettingoffer.odds_providerFK = odds_provider.id
WHERE
odds_provider.active = 'yes'
GROUP BY
odds_provider.id,
odds_provider.name
ORDER BY betcount DESC";
$result = mysql_query($SQL);
while ($db_field = mysql_fetch_assoc($result)) {
echo $db_field['id'] , " " , $db_field['name'] , " " , $db_field['betcount'] , "</BR>";
}
$SQL=“选择
将provider.id作为id,
将provider.name作为名称,
将(bettingoffer.赔率提供程序fk)计算为betcount
从你的供应商
内连接
贝丁格尔
关于bettingoffer.Lobbits\u providerFK=Lobbits\u provider.id
哪里
赔率\u provider.active='是'
分组
您的提供商id,
您的提供者名称
按BETCUNT DESC订购”;
$result=mysql\u查询($SQL);
而($db\u field=mysql\u fetch\u assoc($result)){
echo$db_字段['id']、“”、$db_字段['name']、“”、$db_字段['betcount']、“”;
}
它会做你想做的事,但这需要永远。有更快的方法吗?您可以使用SQL连接查询以更好的方式完成。您不必在第二个表中搜索第一个表中的每个记录。可以在表之间建立联接关系 如果您已经粘贴了两个表的模式定义,这将更有帮助,但一般来说,连接查询就是这样工作的
敬请告知联接查询的工作原理。您应该能够使用SQL联接这两个表。不过,最好不要进行计数(*)。通过指定要计数的特定列,可以获得更好的性能
SELECT
op.id,
op.name,
COUNT(bo.odds_providerFK) AS bet_offering_count
FROM
odds_provider op
INNER JOIN
bettingoffer bo
ON bo.odds_providerFK = op.id
WHERE
op.active = 'yes'
GROUP BY
op.id,
op.name
这一个应该更快,特别是如果没有太多不活动的ID
SELECT id, name, betcount
FROM (
SELECT
odds_providerFK as id,
COUNT(*) as betcount
FROM bettingoffer
WHERE active = 'yes'
GROUP BY odds_providerFK
ORDER BY betcount DESC) as counts
USING (id);
内部连接不是问题,我知道怎么做。问题是将计数结果作为数组获取。这就是join的代码:内部join bettingoffer ON bettingoffer.赔率\u providerFK=赔率\u provider.id您的目标是什么?是否要为第一个表中的每个条目查找第二个表中的条目数?您应该使用的联接类型将取决于您的目标是否在bettingoffer上进行左联接。赔率\u providerFK=赔率\u provider.i使用我提到的左联接。LEFT JOIN on bettingoffer.Lobbits\u providerFK=Lobbits\u provider.i实际上,在MYSQL中,
COUNT(*)
通常比COUNT(column)
快。对于MyISAM表,COUNT()将快得多,因为它缓存了列计数。InnoDB表不缓存行计数,因此count()将变慢。这两个表上有哪些索引?您可以在MySQL提示符下(或通过PHPMyAdmin)尝试并告诉我们EXPLAIN SELECT…
output吗?bettingoffer表中有多少不同的赔率?有多少是非活动的?