的全套,我有以下mysql_query
我已经放在一个PHP变量:PHP MySQL查询不返回预期的结果
$equalDimensions_query =
"SELECT 'allEqual' AS COL1,COUNT(*) AS imgCount FROM (
SELECT imgHeight, imgWidth, imgId AS primaryId FROM primary_images
UNION ALL
SELECT imgHeight, imgWidth, primaryId FROM secondary_images
) AS union_table
WHERE primaryId = $imgId AND imgWidth = $maxImageWidth AND imgHeight = $maxImageHeight
UNION ALL
SELECT 'widthEqual' AS COL1,COUNT(*) AS imgCount FROM (
SELECT imgHeight, imgWidth, imgId AS primaryId FROM primary_images
UNION ALL
SELECT imgHeight, imgWidth, primaryId FROM secondary_images
) AS union_table
WHERE primaryId = $imgId AND imgWidth = $maxImageWidth AND imgHeight != $maxImageHeight
UNION ALL
SELECT 'heightEqual' AS COL1,COUNT(*) AS imgCount FROM (
SELECT imgHeight, imgWidth, imgId AS primaryId FROM primary_images
UNION ALL
SELECT imgHeight, imgWidth, primaryId FROM secondary_images
) AS union_table
WHERE primaryId = $imgId AND imgWidth != $maxImageWidth AND imgHeight = $maxImageHeight";
我使用下面的PHP将这些结果放入一个单关联数组:
$equalDimensions_data = mysql_query($equalDimensions_query) or die('MySql Error' . mysql_error());
while ($row = mysql_fetch_assoc($equalDimensions_data)) {
$cnt[$row['COL1']] = $row['imgCount'];
}
它是假设返回一组三个阵列与值第一个是第一个,第二个是widthEqual
,第三个是heightEqual
(顺序无关紧要)。
唉由于某种原因它是不返回allEqual
:
Array
(
[heightEqual] => 0
[widthEqual] => 0
)
当我使用print_r
原文“三阵列”的形式显示检索到的数据,我得到的只有相同的结果阵列:
Array
(
[COL1] => heightEqual
[imgCount] => 0
)
Array
(
[COL1] => widthEqual
[imgCount] => 0
)
然而,如果我用print_r
没有循环如下:
$equalDimensions_data = mysql_query($equalDimensions_query) or die('MySql Error' . mysql_error());
$equalDimensions_array = mysql_fetch_assoc($equalDimensions_data);
print("<pre>");
print_r($equalDimensions_array);
print("</pre>");
我回到了以前缺少allEqual
阵列:
Array
(
[COL1] => allEqual
[imgCount] => 2
)
据我所知,因为没有在该while
循环的最后一种情况,我只返回一个的结果;但为什么呢,在while
循环的情况下,allEqual
的结果似乎被跳过了?这是我的代码问题吗?我感谢您提供的任何帮助。对于这样一个长期的问题,我表示歉意。我想确保尽可能提供尽可能多的信息。
你可以在这里下载我的数据库模式:https://files.me.com/stefanmelnychenko/453l4z
强压的问题。直接在客户端运行查询,以便在图片中没有php。在确定查询没问题后,你忘记了它不在调试画面中的sql,那么php将很容易调试,最后它是一个数组问题,不是diffuclt。 – Melsi
在while循环期间$ row var如何变化?我会看到它是如何随着调试器发展的。或者甚至将其作为var_dump作为第一件事情。如果它有什么问题,它可能会影响你进一步的阵列构建。 – maraspin
我同意w/Melsi。我的建议也是分解这个问题。首先查明查询是否返回您的预期结果。然后,尝试跟踪$ row变量如何随着mysql_fetch_assoc调用而变化。如果一切都如你所期望的那样,那么在创建它的每一步时都要注意新的阵列。 – maraspin