2011-09-17 120 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