在PHP中初始化MYSQL的rownum值
当我直接以SQL的形式通过phpMyAdmin运行时,我有一个查询可以正常工作,但是当我尝试在PHP中这样做时,它就不起作用了。我怀疑问题是因为我试图从生成的表返回rownum值,而第一行的SET命令不起作用。下面是一个查询示例,它与SQL一样正常工作:在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
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 := ...