PHP MySQL数组==
我试图只回显PHP MySQL数组的某些行 我经历了多次迭代,但似乎无法理解PHP MySQL数组==,php,mysql,arrays,Php,Mysql,Arrays,我试图只回显PHP MySQL数组的某些行 我经历了多次迭代,但似乎无法理解 <?php $conn = new mysqli("SERVER", "user", "password", "dbname"); $sql = " SELECT POSTDATE, MEMBERS_ALL, MEMBERS_ACTIVE, FROM daily_numbers "; $result = $conn->query($sql); $conn-&g
<?php
$conn = new mysqli("SERVER", "user", "password", "dbname");
$sql = "
SELECT
POSTDATE,
MEMBERS_ALL,
MEMBERS_ACTIVE,
FROM
daily_numbers
";
$result = $conn->query($sql);
$conn->close();
while($row = $result->fetch_assoc()) {
if ($row["MEMBERS_ALL"] == 600) {
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
};
while($row = $result->fetch_assoc()) {
if ($row["MEMBERS_ALL"] == 705) {
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
};
?>
上面的示例将只显示第一个while/if语句(=600),但是我无法让它回显第二个while/if语句(=705)
我希望能够使用不同的约束多次回显数组(我不想多次运行SQL语句)。您不需要第二个循环。就这样做吧
<?php
$conn = new mysqli("SERVER", "user", "password", "dbname");
$sql = "
SELECT
POSTDATE,
MEMBERS_ALL,
MEMBERS_ACTIVE,
FROM
daily_numbers
";
$result = $conn->query($sql);
$conn->close();
while($row = $result->fetch_assoc()) {
if ($row["MEMBERS_ALL"] == 600) {
//do something
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
if ($row["MEMBERS_ALL"] == 705) {
//do something
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
};
?>
PHP跟踪它在结果数组中的位置——每次调用fetch_assoc()都会将指针递增1,直到指针到达末尾,但不会为您重置指针。为了检查这一点,在第二个循环中回显一个测试值——您将看不到任何输出 正如Amit所说,您可以将两个调用都放在第一个while循环中,也可以调用:
$result->data_seek(0);
将指针重置回$result循环的开头。将它放在两个while循环之间,它应该可以工作
迭代整个数组不是特别有效,因此最好避免这种情况。如果希望保持现在的顺序,但避免在数组上多次迭代,可以将值存储为字符串,如下所示:
<?php
$conn = new mysqli("SERVER", "user", "password", "dbname");
$sql = "
SELECT
POSTDATE,
MEMBERS_ALL,
MEMBERS_ACTIVE,
FROM
daily_numbers
";
$result = $conn->query($sql);
$conn->close();
$first = '';
$second = '';
while($row = $result->fetch_assoc()) {
if ($row["MEMBERS_ALL"] == 600) {
$first .= "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
} else if ($row["MEMBERS_ALL"] == 705) {
$second .= "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
};
echo $first;
echo $second;
?>
试试这个:
使用seek to row的面向对象样式示例:
<?php
$conn = new mysqli("SERVER", "user", "password", "dbname");
$sql = "
SELECT
POSTDATE,
MEMBERS_ALL,
MEMBERS_ACTIVE,
FROM
daily_numbers
";
$result = $conn->query($sql);
$conn->close();
//Combine while loop as single...
while($row = $result->fetch_assoc()) {
//if MEMBERS_ALL == 600...
if ($row["MEMBERS_ALL"] == 600) {
//do something
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
//if MEMBERS_ALL == 705...
if ($row["MEMBERS_ALL"] == 705) {
//do something
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
};
?>
您需要使用默认方法将mysqli resultset指针重置为0。函数将结果指针调整到结果集中的任意行
<?php
$conn = new mysqli("SERVER", "user", "password", "dbname");
$sql = "
SELECT
POSTDATE,
MEMBERS_ALL,
MEMBERS_ACTIVE,
FROM
daily_numbers
";
$result = $conn->query($sql);
$conn->close();
while($row = $result->fetch_assoc()) {
if ($row["MEMBERS_ALL"] == 600) {
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
};
/* seek to row no. 0 */
$result->data_seek(0);
while($row = $result->fetch_assoc()) {
if ($row["MEMBERS_ALL"] == 705) {
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
};
?>
或将两个while循环与单个while循环相结合:
<?php
$conn = new mysqli("SERVER", "user", "password", "dbname");
$sql = "
SELECT
POSTDATE,
MEMBERS_ALL,
MEMBERS_ACTIVE,
FROM
daily_numbers
";
$result = $conn->query($sql);
$conn->close();
//Combine while loop as single...
while($row = $result->fetch_assoc()) {
//if MEMBERS_ALL == 600...
if ($row["MEMBERS_ALL"] == 600) {
//do something
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
//if MEMBERS_ALL == 705...
if ($row["MEMBERS_ALL"] == 705) {
//do something
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
}
};
?>
希望这对你有帮助 您可以在SQL查询中使用ORDERBY子句来管理它,如果需要条件,则不使用php
<?php
$conn = new mysqli("SERVER", "user", "password", "dbname");
$sql = "
SELECT
POSTDATE,
MEMBERS_ALL,
MEMBERS_ACTIVE,
FROM
daily_numbers
ORDER BY MEMBERS_ALL ASC
";
$result = $conn->query($sql);
$conn->close();
while($row = $result->fetch_assoc()) {
echo "Date: " . $row["POSTDATE"] . ", Members All: " . $row["MEMBERS_ALL"] . ", Members Active: " .$row["MEMBERS_ACTIVE"];
};
?>
注意:此解决方案仅适用于需要按升序或降序排列的结果的情况。Schiem解释了出现“错误”的原因,解决方案和Amit为您提供了更好的解决问题的方法,但两者都很有效!非常感谢。我特别喜欢将结果添加到一个变量中,稍后我可以在脚本中调用该变量。