我正在建立我的网站,并在其中一个页面,我使用MySQL和PHP加载一些信息。但是,与其他不使用数据库的页面相比,该页面的加载时间较长。
在我的代码中,我多次使用:$selectMember = mysql_query("SELECT name, nametag FROM members");
$countMembers = mysql_num_rows($selectMember);
[...]
for($ID = 1; $ID <= $countMembers ; $ID++){
$member = mysql_query("SELECT name, nametag FROM members WHERE ID = $ID");
while($row = mysql_fetch_array($member)) {
我认为问题出在这部分代码上。我不想把整个都写出来,因为它有200行。有没有办法使数据库研究更简单和/或使页面加载更快?
你只需要:
$member = mysql_query("SELECT name, nametag FROM members");
while($row = mysql_fetch_array($member)) {
//show results
echo $row['name'];
无意义的循环和每个id一个查询导致延迟
在这种情况下,您正在运行不必要的查询,并且"内部"查询是错误的。它们只能偶然地工作—因为您的成员按顺序编号而没有"孔",因此按顺序生成的ID确实在数据库中查找记录。
如果你这样做:
$selectMember = mysql_query("SELECT ID, name, nametag FROM members");
上面的已经获取下面检索的所有数据,并完成ID:
$countMembers = mysql_num_rows($selectMember);
while($row = mysql_fetch_array($selectMember) {
....
也就是说,mysql_
函数已弃用;你应该使用mysqli_
或者(恕我直言,更好;但你的里程可能会有所不同)PDO功能。您肯定不希望学习可能在下一个PHP版本中不再存在的DB策略!
在这里你会发现一些例子,如何释放PDO的全部力量与较新的mysql。
你要做的是像这样.....
$ids = "(";
for($ID = 1; $ID <= $countMembers ; $ID++){
$ids.=$ID.",";
}
$ids = rtrim(",",$ids);
$ids.=")";
$member = mysql_query("SELECT name, nametag FROM members WHERE ID IN $ids");
while($row = mysql_fetch_array($member)) { etc etc
但是上面所有这些都是多余的和无意义的,因为你已经在$selectMember变量中获取数据了。因此,通过一个查询,您已经获得了所有内容....
$selectMember = mysql_query("SELECT name, nametag FROM members");
while($row = mysql_fetch_array($selectMember)) {
echo $row[0];
echo $row[1];
// etc etc
}
不知道为什么要这样做,但是一个查询就可以做到:
SELECT name, nametag FROM members
WHERE ID BETWEEN 1 AND (SELECT COUNT(*) FROM members)