MySQL查询在phpmyadmin中工作,但PHP结果集中没有返回任何行

时间:2010-01-27 14:35:44

标签: php sql mysql

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

2 个答案:

答案 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

然后循环遍历结果,从单独的查询中获取每行所需的数据,得到了我所追求的结果。