我有这两个问题
mysql_select_db($database_dbconnect, $dbconnect);
$query_Asset = "SELECT idAsset, AssetName FROM Asset WHERE idLocation = '1'";
$AssetUp = mysql_query($query_Asset, $dbconnect) or die(mysql_error());
$array1 = mysql_fetch_assoc($AssetUp);
mysql_select_db($database_dbconnect, $dbconnect);
$query_DocUp = "SELECT AssetDocStand.idAsset, Asset.AssetName FROM AssetDocStand INNER JOIN Asset ON AssetDocStand.idAsset = Asset.idAsset
WHERE AssetDocStand.idDocumentStandards = '2' AND Asset.idLocation ='1'";
$DocUp = mysql_query($query_DocUp, $dbconnect) or die(mysql_error());
$array2 = mysql_fetch_assoc($DocUp);
一个人获取当前位置的所有资产。另一个获取我当前位置的所有资产,其中包含上传标准为2的文档。请注意我已为此帖发布了所有错误检查。
如果我打印结果如下:
do{
print_r($array1);
echo "<br>";
}while($array1 = mysql_fetch_assoc($AssetUp));
echo "<br><br><br>";
do{
print_r($array2);
echo "<br>";
}while($array2 = mysql_fetch_assoc($DocUp));
echo "<br><br><br>";
我得到以下内容。
Array ( [idAsset] => 10000005 [AssetName] => HP )
Array ( [idAsset] => 10000006 [AssetName] => HP Server )
Array ( [idAsset] => 10000009 [AssetName] => HP Laptop )
Array ( [idAsset] => 10000010 [AssetName] => Office Printer )
Array ( [idAsset] => 10000023 [AssetName] => test )
Array ( [idAsset] => 10000023 [AssetName] => test )
不,我一直在尝试仅输出没有上传文档的资产。如您所见,这将是第一个列表中的前4个资产。现在我接下来要做的就是合并数组然后在我的新数组上使用array_unique但是当我这样做时;
$array3= array_merge($array1, $array2);
print_r($array3);
我只看到以下内容;
idAsset; 10000023
AssetName; test
我不明白其他4个资产去了哪里?谁能帮我看看我的错误?谢谢你们和gals
答案 0 :(得分:1)
在你的第一个do ... while循环中,每次迭代都用数据库中的下一行覆盖$array1
中的前一个值,你不会将该行添加到数组中。所以之后只有最后一行留在数组中,这与$array2
中的那一行相同。您需要确保$array1
包含整个查询结果,例如。像这样:
$array1[] = mysql_fetch_assoc($AssetUp);
编辑:另请注意,不推荐使用mysql_ *函数。如果可能,您可能希望将其替换为例如库MySQLi。这甚至可以为您提供一个函数(mysqli_fetch_all()
),您可以使用该函数在一次调用中获取整个查询结果。
答案 1 :(得分:1)
只需替换下面的一点变化并检查:$ array1到$ array1 []和$ array2到$ array2 []
do{
print_r($array1);
echo "<br>";
}while($array1[] = mysql_fetch_assoc($AssetUp));
echo "<br><br><br>";
do{
print_r($array2);
echo "<br>";
}while($array2[] = mysql_fetch_assoc($DocUp));
echo "<br><br><br>";
答案 2 :(得分:1)
首先,不要使用mysql_*
,因为这些功能已弃用,很快就会停止支持。请改用mysqli_ *和PDO。
那就是说,你正在使用,甚至理解mysql_fetch_assoc
完全错误。让你的思想指向正确方向的一个例子可能是这样的:
<?
$q = mysql_query("...");
while ($f = mysql_fetch_assoc($q)) {
//do something, irrelevant
}
print_r($f);
?>
这将仅打印出查询结果的最后一行。这是因为mysql_fetch_assoc
获取行,返回它,并将指针移动到下一行。循环结束后,您只有变量的最后一行。你没有意识到这一点,因为你的print_r
在你的循环中是 ,所以如果你把它移到循环之外,你会很快意识到你只看到最后一行。
可能适合您的示例是这样的:
<?
$q1 = mysql_query("");
$array1 = Array();
while ($f = mysql_fetch_assoc($q1)) $array1[] = $f;
$q2 = mysql_query("");
$array2 = Array();
while ($f = mysql_fetch_assoc($q2)) $array2[] = $f;
?>
如果您在这两个循环后执行print_r($array1);
和print_r($array2);
,则会看到$array1
和$array2
拥有完整的结果集。你只需要在之后合并它们,这应该可以解决问题。
请告诉我这是否适合您。
答案 3 :(得分:1)
更改您的代码,因为每次循环$array1
时,$array2
都会从数据库中保存新的获取行值
do{
print_r($array1);
echo "<br>";
}while($array1 = mysql_fetch_assoc($AssetUp));
echo "<br><br><br>";
do{
print_r($array2);
echo "<br>";
}while($array2 = mysql_fetch_assoc($DocUp));
echo "<br><br><br>";
作为
$firstArray = array();
$secondArray = array();
do{
print_r($array1);
array_push($firstArray,$array1);
echo "<br>";
}while($array1 = mysql_fetch_assoc($AssetUp));
echo "<br><br><br>";
do{
print_r($array2);
echo "<br>";
array_push($secondArray ,$array2);
}while($array2 = mysql_fetch_assoc($DocUp));
echo "<br><br><br>";
$array3= array_merge($firstArray, $secondArray );
print_r($array3);