在PHP中初始化MYSQL的rownum值

时间:2011-06-16 13:10:40

标签: php mysql

当我通过phpMyAdmin直接作为SQL运行时,我的查询工作正常,但是当我尝试在PHP中执行此操作时,它不起作用。我怀疑问题是因为我试图从生成的表中返回rownum值,并且第一行上的SET命令不起作用。这是一个像SQL一样工作的示例查询:

SET @rownum =0;
SELECT * FROM (
    SELECT i.*, @rownum := @rownum +1 AS row,  (
        SELECT COUNT( * )FROM _votes WHERE i.id = image_id) AS total_votes, 
        (SELECT COUNT( * ) FROM _votes WHERE i.id = image_id AND voter_id = 67) AS voted 
        FROM _images AS i WHERE i.approved = 1 ORDER BY total_votes DESC ) 
    AS T WHERE entrant_id IN (68,69,70,71) 

(如果不正确,请原谅我的格式)

两件事:

  • 这个查询太长而且效率低吗?
  • 如果来自php预处理语句,如何将@rownum值初始化为零?

我尝试在查询结尾添加JOIN (SELECT @rownum :=0) r,但这不起作用。 此外,我在查询中的各个点尝试了这种加入方法失败。

PHP

$query = "SELECT * FROM ( SELECT i.*, @rownum := ...

2 个答案:

答案 0 :(得分:2)

SET个查询是不同的查询,您只能通过PHP一次发送一个查询。因此,运行SET查询,然后运行第二个查询。如果您使用相同的连接,MySQL服务器将记住您的设置。

答案 1 :(得分:2)

我不确定使用@rownum变量的目的;也许还有其他方法可以这样做。

但无论如何,您的查询问题是,使用PHP的MySQL库,您无法在同一次运行中发送多个查询。您必须将它们作为2个查询发送,如果在同一连接中完成,MySQL将不会丢失@rownum中的值。

另一种选择是你使用具有运行多个查询的函数的MySQLi库 - multi_query()。这只是一个建议,因为我不确定你使用MySQLi会有多么棘手。