2011-09-17 121 views
1

的全套,我有以下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

+2

强压的问题。直接在客户端运行查询,以便在图片中没有php。在确定查询没问题后,你忘记了它不在调试画面中的sql,那么php将很容易调试,最后它是一个数组问题,不是diffuclt。 – Melsi

+0

在while循环期间$ row var如何变化?我会看到它是如何随着调试器发展的。或者甚至将其作为var_dump作为第一件事情。如果它有什么问题,它可能会影响你进一步的阵列构建。 – maraspin

+0

我同意w/Melsi。我的建议也是分解这个问题。首先查明查询是否返回您的预期结果。然后,尝试跟踪$ row变量如何随着mysql_fetch_assoc调用而变化。如果一切都如你所期望的那样,那么在创建它的每一步时都要注意新的阵列。 – maraspin

回答

1

这是你复制。您不会更改变量或任何内容,以便复制任何错误(如果有)。 sql echoed

我检查你的schemma和一切都很好,这是一个PHP脚本:

<?PHP 

// Make a MySQL Connection 
mysql_connect("localhost", "root", "") or die(mysql_error()); 

//select database 
mysql_select_db("new_arrivals_imgs") or die(mysql_error()); 


$imgId=1; 
$maxImageHeight=1; 
$maxImageWidth=1; 

$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"; 

$equalDimensions_data = mysql_query($equalDimensions_query) 
or die('MySql Error' . mysql_error()); 

while ($row = mysql_fetch_assoc($equalDimensions_data)) { 
    $cnt[$row['COL1']] = $row['imgCount']; 
} 

print_r($cnt); 

?> 

,这是结果:

enter image description here

+0

现在对我来说已经太迟了,现在睡觉了。回来时很高兴再次回来,再见!我正在努力思考它为什么对我而言并不适合你,但是......但是请仔细检查我的脚本,看看与你的脚本有什么不同。再见! – Melsi

+0

有没有想过一个完整的白痴?我意识到(在一个非常好的解密工具的帮助下,称为MacGDBp),当我使用'print_r'进行测试时,以及'$ cnt [$ row ['COL1']] = $ row ['imgCount '];',我忘记删除'$ equalDimensions_array = mysql_fetch_assoc($ equalDimensions_data);'这显然是存储和删除第一个数组。我觉得很糟糕,因为我犯了一个愚蠢的错误。请接受我的道歉并感谢您的全力帮助。 – stefmikhail