我正在构建我的网站,在其中一个页面中,我使用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行。有没有办法让数据库研究更简单和/或使页面加载更快?
答案 0 :(得分:3)
您只需要:
$member = mysql_query("SELECT name, nametag FROM members");
while($row = mysql_fetch_array($member)) {
//show results
echo $row['name'];
无意义的循环和每个id的一个查询导致延迟。
答案 1 :(得分:2)
在这种情况下,您不必要地运行查询,并且“内部”查询是错误的。它们只是偶然工作 - 因为你的成员按顺序编号而没有“漏洞”,所以顺序生成的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版本中可能不再存在的数据库策略!
Here你会发现一些关于如何用更新的MySQL释放PDO全部功能的例子。
答案 2 :(得分:0)
你要做的就是这样......
$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
}
答案 3 :(得分:0)
不确定您为什么要这样做,但有一个查询会这样做:
SELECT name, nametag FROM members
WHERE ID BETWEEN 1 AND (SELECT COUNT(*) FROM members)