我有以下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。
嘗試在每個語句後添加一個分號。 – 2010-01-27 14:38:11
當通過PHP運行查詢時,每個都通過mysqli_query()單獨傳遞,所以不需要。在phpmyadmin中,是的,我用分號分隔它們。 – berty 2010-01-27 14:42:25
旁註:您不能有效地存儲類別,這種方式數據庫引擎必須在** ALL **產品行上執行字符串替換功能。你應該有另一個表存儲關係'post_id => category_id' ... – 2016-07-08 17:02:04