在 WHILE 之前拉取加入的 Table 数据

Pulling Joined Table Data Before WHILE

我在 MySQL 和 PHP 写作方面非常陌生。我遇到的问题是在 while 行之前从特定的 table 中提取数据。我当前的代码是

$query_join_tables  = "SELECT m.*, c.id, c.firstname, c.lastname, 
                        IFNULL(m.system_customer,c.id) AS client_id
                        FROM ... AS m
                        LEFT
                        JOIN ... as c
                        ON m.system_customer = c.id
                        WHERE system_customer=".$clientid."
                        ORDER BY system_id ASC";

$result = mysql_query($query_join_tables);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}

echo "BLA BLA BLA";

while($row = mysql_fetch_array($result)){

    echo "MORE BLA BLA";

问题是,当我尝试从 table 行之前的 while 行拉取时,它不会拉取。如果我之后拉,它工作得很好。

无效:

echo ".$row['firstname'].";
while($row = mysql_fetch_array($result)){

有效:

while($row = mysql_fetch_array($result)){
    echo ".$row['firstname'].";

此外,在提到 mysqli 或 PDO 之前 - 我做不到。我正在为加密和硬编码的东西编写一个模块。

你会觉得很傻。 $row 变量还没有得到获取的行。当行

$row = mysql_fetch_array($result)

是运行,也就是ONE行的数据给$row的时候。在此之前调用 $row 只会给你一个空值。

每次 while 循环再次开始时,它都会得到一个新行。这称为迭代器。它一次在列表中向下移动一行,直到它 运行s 并且什么也没找到。那就是它退出循环的时候。

编辑 (01/23/2015): 现在我知道您实际上想让两个循环使用相同的结果。我将展示如何重置迭代器。

while($row = mysql_fetch_array($result)) {Do Stuff}

mysql_data_seek($result, 0);

while($row = mysql_fetch_array($result)) {Do Stuff}

希望对您有所帮助。

mysql 扩展已弃用,将来会被删除。使用 mysqli。试试下面的代码。

$con = mysqli_connect("localhost","root","","dbname");

$query_join_tables = "SELECT m.*, c.id, c.firstname, c.lastname, 
IFNULL(m.system_customer,c.id) AS client_id
FROM ... AS m
LEFT
JOIN ... as c
ON m.system_customer = c.id
WHERE system_customer=".$clientid."
ORDER BY system_id ASC";

$result = $con->query($query_join_tables);

$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
echo $row["firstname"];
$conn->close();

好的,试试这个。应该可以。

mysql_connect("localhost", "root", "") or
die("Could not connect: " . mysql_error());
mysql_select_db("dbName");

$query_join_tables = "SELECT m.*, c.id, c.firstname, c.lastname, 
IFNULL(m.system_customer,c.id) AS client_id
FROM ... AS m
LEFT
JOIN ... as c
ON m.system_customer = c.id
WHERE system_customer=".$clientid."
ORDER BY system_id ASC";

$result = mysql_query($query_join_tables);
$res = mysql_fetch_array($result);
echo $res['vBookName'];

mysql_free_result($result);