我有以下MySQL查询:
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行,因为可能有一个巨大的总数,在后续查询中,我应该计算总数,因此在第一个SELECT之后SQL_CALC_FOUND_ROWS。
答案 0 :(得分:1)
您只需要执行第一个查询以获取返回给PHP的记录集。一旦拥有它,您就可以使用它。您不应该将连接的查询从PHP传递给MySQL。
即
$result = mysql_query($query);
$recordCount = mysql_num_rows($result);
答案 1 :(得分:0)
出于某种原因,更改查询的第一行:
SELECT SQL_CALC_FOUND_ROWS p.*
要:
SELECT SQL_CALC_FOUND_ROWS p.id
然后循环遍历结果,从单独的查询中获取每行所需的数据,得到了我所追求的结果。