2010-01-27 85 views
1

我有以下MySQL查詢:MySQL查詢工作在phpMyAdmin中,但沒有列在PHP中返回結果集

SELECT SQL_CALC_FOUND_ROWS p.* 
FROM product AS p 
LEFT JOIN productCategory AS c ON FIND_IN_SET(c.id, REPLACE(TRIM(p.categories), ' ',',')) 
WHERE (
    c.id IS NULL 
    OR c.status = 'D' 
    OR p.categories IS NULL 
    OR TRIM(p.categories) = '' 
) 
AND p.deprecated = 'N' 
LIMIT 0,30 

該查詢拾起產品:

  • 有事在p.categories設置列,但productCategory表中的行不存在
  • productCategory行,但productCategory行的狀態設置爲'D'
  • 有沒有在p.categories

p.categories設置是一行空間的分隔代表在productCategory表ID數值。不是最好的設計,但我已經完成了這項任務,所以需要一種做法。

在PHP代碼,該查詢被執行直接算賬:

SELECT FOUND_ROWS() as count 

當從phpMyAdmin的執行,我得到數千行回來,當我追加的第二個查詢,我得到正確的計數值行數。當我通過mysqli_query()執行相同的第一個查詢,我沒有得到任何排在所有返回,下面的查詢返回的1

兩個phpmyadmin的計數和我的PHP代碼連接到同一個數據庫。

任何人都可以看到出了什麼問題?!

更新:

我只希望前30行返回,因爲有可能是一個巨大的總數,在隨後的查詢中,我應該得到的是什麼總將是一個數,因此後SQL_CALC_FOUND_ROWS第一個SELECT。

+0

嘗試在每個語句後添加一個分號。 – 2010-01-27 14:38:11

+0

當通過PHP運行查詢時,每個都通過mysqli_query()單獨傳遞,所以不需要。在phpmyadmin中,是的,我用分號分隔它們。 – berty 2010-01-27 14:42:25

+0

旁註:您不能有效地存儲類別,這種方式數據庫引擎必須在** ALL **產品行上執行字符串替換功能。你應該有另一個表存儲關係'post_id => category_id' ... – 2016-07-08 17:02:04

回答

0

出於某種原因,改變了查詢的第一行:

SELECT SQL_CALC_FOUND_ROWS p.* 

要:

SELECT SQL_CALC_FOUND_ROWS p.id 

然後通過結果得到的數據我循環需要從單獨的查詢中得到我在之後的結果。

1

您只需執行第一個查詢即可將記錄集返回給PHP。一旦你擁有了它,你就可以計入你的PHP。您不應該將連接的查詢從PHP傳遞到MySQL。

$result = mysql_query($query); 
$recordCount = mysql_num_rows($result); 
+0

這將包括結果中的所有行,我只想要最初的30個,因爲可能會有一個巨大的數字,然後計算總數,因此SQL_CALC_FOUND_ROWS在第一個SELECT之後。順便說一句:我沒有連接查詢,每個人都在單獨調用mysqli_query()。 – berty 2010-01-27 14:44:08

+0

您應該將這些細節添加到您的問題中,因爲如果他們知道所有這些詳細信息,它將幫助人們回答它。 – Fenton 2010-01-28 08:05:47

相關問題