-2

我制作了一个 PHP 脚本,它从 MySQL 表中请求信息。如果它是正确的,它会做一些事情,但是这个脚本很慢,因为有很多行不正确。这是脚本:

$everypost = mysql_query("SELECT MAX(asd) FROM asd;");
$everypost = mysql_fetch_array($everypost);
$id = $everypost[0];
while ($id > 0 && $i < $var2) {
    $id = $id - 1;
    $tulajid = $context['user']['id'];
    $posts = mysql_query("SELECT * FROM asd WHERE asd='$id' AND owner='$var' GROUP BY(asd);");
    $prow = mysql_fetch_array($posts);
    if(isset($prow['asd'])) {//If it's correct, so the user is the owner
        $i++;
    }
}

我的问题是它检查每个帖子,而不仅仅是用户的帖子。有没有办法让它更快?如果我AND owner ='$var'从 $posts 查询中删除,它会非常快。

CREATE TABLE `asd` ( 
  `asd` int(10) unsigned NOT NULL, 
  `id_member` mediumint(8) unsigned NOT NULL, 
  `score` smallint(2) NOT NULL, 
  `owner` mediumint(8) unsigned NOT NULL, 
  `log_time` int(10) unsigned NOT NULL, 
  PRIMARY KEY (`id_msg`,`id_member`), 
  KEY id_member (`id_member`), 
  KEY owner (`owner`), 
  KEY owner_2 (`owner`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1

已解决

4

3 回答 3

2

这意味着您需要审查您的数据库设计。您可能没有,因此需要在您的owner列上编制索引。

仅供参考,您不应该mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-03-02T18:21:03.213 回答
0

它仍然很慢。id_msg = asd 和 id_poster = 所有者。

于 2013-03-03T14:24:39.313 回答
0

我认为这里的主要问题不一定是数据库设计,而是您查询信息的方式。您在一个查询中提取最新的内容,然后您向下循环并为循环的每次迭代发出一个查询。这位先生,疯了。您可以通过使用正确的条件以更少的查询来执行此操作。

如果没有来自您的架构的更多信息,我会假设您可以执行以下操作:

SELECT a.* FROM asd a WHERE a.owner = ? ORDER BY a.asd DESC

asd这将为您提供一个元组的所有实例,其中owner是某个值(您可以将 替换为?您的值),按asd,从最高到最低排序。我不确定这是否是你想要的,如果你可以在 PHP 中发布有关表格和变量的更多信息,我可能会给你一个更好的答案,但不管你试图获得的数据是什么,我都很确定有很多比你现在做的更有效的方法。

于 2013-03-02T18:25:42.640 回答