php - SQL 多重查询 - 太重了?

标签 php mysql

我一直在编写一个新的仪表板,我想在其中显示各种数据库统计信息,主要是计算行数并将结果设置为变量,一切正常,但我有点担心太多的 SELECT 查询会变得太多如果大量用户正在进入或刷新页面,则会很重。

感谢您的意见:)

$tbl_players = players;

$xbox = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'XBOX360'");
$ps3 = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'PS3'");
$pc = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'PC'");
$xbfa = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'XBOX360' && fathread LIKE 'http%'");
$psfa = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'PS3' && fathread LIKE 'http%'");
$pfa = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'PC' && fathread LIKE 'http%'");
$xbcr = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'XBOX360' && crthread LIKE 'http%'");
$pscr = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'PS3' && crthread LIKE 'http%'");
$pcr = mysql_query("SELECT * FROM $tbl_players WHERE Console = 'PC' && crthread LIKE 'http%'");
while($row = mysql_fetch_array($xbox))
    {
$cxbox = mysql_num_rows($xbox);
}
while($row = mysql_fetch_array($ps3))
    {
$cps3 = mysql_num_rows($ps3);
}
while($row = mysql_fetch_array($pc))
    {
$cpc = mysql_num_rows($pc);
}
while($row = mysql_fetch_array($xbfa))
    {
$xboxfa = mysql_num_rows($xbfa);
}
while($row = mysql_fetch_array($psfa))
    {
$ps3fa = mysql_num_rows($psfa);
}
while($row = mysql_fetch_array($pfa))
    {
$pcfa = mysql_num_rows($pfa);
}
while($row = mysql_fetch_array($xbcr))
    {
$xboxcr = mysql_num_rows($xbcr);
}
while($row = mysql_fetch_array($pscr))
    {
$ps3cr = mysql_num_rows($pscr);
}
while($row = mysql_fetch_array($pcr))
    {
$pccr = mysql_num_rows($pcr);
}

$tbl_interactive = interactive;

$maximum = mysql_query("SELECT ID FROM $tbl_interactive ORDER BY ID DESC LIMIT 1");
while($max = mysql_fetch_array($maximum))
{
$cint = $max['ID'];
}
$xboxf = mysql_query("SELECT * FROM $tbl_interactive WHERE Console = 'XBOX360' && Type = 'Player' && $date < EndTime");
$xboxc = mysql_query("SELECT * FROM $tbl_interactive WHERE Console = 'XBOX360' && Type = 'Club' && $date < EndTime");
$ps3f = mysql_query("SELECT * FROM $tbl_interactive WHERE Console = 'PS3' && Type = 'Player' && $date < EndTime");
$ps3c = mysql_query("SELECT * FROM $tbl_interactive WHERE Console = 'PS3' && Type = 'Club' && $date < EndTime");
$pcf = mysql_query("SELECT * FROM $tbl_interactive WHERE Console = 'PC' && Type = 'Player' && $date < EndTime");
$pcc = mysql_query("SELECT * FROM $tbl_interactive WHERE Console = 'PC' && Type = 'Club' && $date < EndTime");
while($row = mysql_fetch_array($xboxf))
    {
$xboxfi = mysql_num_rows($xboxf);
}
while($row = mysql_fetch_array($xboxc))
    {
$xboxci = mysql_num_rows($xboxc);
}
while($row = mysql_fetch_array($ps3f))
    {
$ps3fi = mysql_num_rows($ps3f);
}
while($row = mysql_fetch_array($ps3c))
    {
$ps3ci = mysql_num_rows($ps3c);
}
while($row = mysql_fetch_array($pcf))
    {
$pcfi = mysql_num_rows($pcf);
}
while($row = mysql_fetch_array($pcc))
    {
$pcci = mysql_num_rows($pcc);
}

非常感谢!

最佳答案

我会确保您有适当的索引(如果您愿意,可以使用索引)。

此外,您可能希望使用 COUNT 而不是选择大量行然后仅使用行数。这是因为这样的查询:

SELECT * FROM $tbl_players WHERE Console = 'XBOX360'

... 正在发回大量数据,并且由于您没有使用它,因此浪费了带宽和不必要的额外加载时间。最好搭配:

SELECT COUNT(*) FROM $tbl_players WHERE Console = 'XBOX360'

...然后放置适当的 PHP 以仅检索计数。

关于php - SQL 多重查询 - 太重了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14469307/

相关文章:

php - Mysql:从父表中选择,仅当子表有行时

php - SQL 查询中的变量 - PHP MYSQL

php - 对于 PHP 和 MySQL,您应该检查回滚失败吗?

javascript - jquery - 通过 POST (ajax) 发送 JSON 数据并在 php 中检索

mysql - 找不到模块 `mysql` node.js

mysql - 在子查询中按列对最终结果进行排序

java - 如何在服务器上运行java程序?

PHP 设置 Mysql 每小时限制

php - 如何使用 Symfony 中的另一个连接执行 Doctrine 迁移? (使用 DoctrineMigrationsBundle 3.0.x)

php - While 语句不显示 ECHO