Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中初始化MYSQL的rownum值_Php_Mysql - Fatal编程技术网

在PHP中初始化MYSQL的rownum值

在PHP中初始化MYSQL的rownum值,php,mysql,Php,Mysql,当我直接以SQL的形式通过phpMyAdmin运行时,我有一个查询可以正常工作,但是当我尝试在PHP中这样做时,它就不起作用了。我怀疑问题是因为我试图从生成的表返回rownum值,而第一行的SET命令不起作用。下面是一个查询示例,它与SQL一样正常工作: SET @rownum =0; SELECT * FROM ( SELECT i.*, @rownum := @rownum +1 AS row, ( SELECT COUNT( * )FROM _votes WHER

当我直接以SQL的形式通过phpMyAdmin运行时,我有一个查询可以正常工作,但是当我尝试在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) 
如果格式不正确,请原谅

两件事:

此查询是否过长且效率低下? 如果@rownum值来自php准备的语句,如何将其初始化为零? 我已经尝试将JOIN SELECT@rownum:=0 r添加到查询的末尾,但这不起作用。 此外,我在查询中的各个点尝试了这种连接方法,但都没有成功

php


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

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

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

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


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

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

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


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

您需要PHP中的@rownum吗?你可以通过在查看行时设置计数器来完成同样的事情。我试图返回排行榜中选定用户的排名,因此我认为行号并不总是与此位置匹配。如果对结果集进行排序,则行的顺序将正确。是的,但例如,如果只返回两个结果,它们的顺序是正确的,但我需要知道排行榜上的实际位置,很可能不是1和2。你需要PHP中的@rownum吗?你可以通过在查看行时设置计数器来完成同样的事情。我试图返回排行榜中选定用户的排名,因此我认为行号并不总是与此位置匹配。如果对结果集进行排序,则行的顺序将正确。是的,但例如,如果只返回两个结果,他们将在正确的顺序,但我需要知道在排行榜上的实际位置,最有可能是不是1和2。感谢这一点。我使用的预处理语句不适用于multi_查询,因此我必须在同一个连接上执行两个不同的查询。谢谢。我使用的预处理语句不适用于multi_查询,因此我必须在同一个连接上执行两个不同的查询。
$query = "SELECT * FROM ( SELECT i.*, @rownum := ...