我有以下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