当我通过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)
(如果不正确,请原谅我的格式)
两件事:
我尝试在查询结尾添加JOIN (SELECT @rownum :=0) r
,但这不起作用。
此外,我在查询中的各个点尝试了这种加入方法失败。
PHP
$query = "SELECT * FROM ( SELECT i.*, @rownum := ...
答案 0 :(得分:2)
SET
个查询是不同的查询,您只能通过PHP一次发送一个查询。因此,运行SET
查询,然后运行第二个查询。如果您使用相同的连接,MySQL服务器将记住您的设置。
答案 1 :(得分:2)
我不确定使用@rownum变量的目的;也许还有其他方法可以这样做。
但无论如何,您的查询问题是,使用PHP的MySQL库,您无法在同一次运行中发送多个查询。您必须将它们作为2个查询发送,如果在同一连接中完成,MySQL将不会丢失@rownum中的值。
另一种选择是你使用具有运行多个查询的函数的MySQLi库 - multi_query()。这只是一个建议,因为我不确定你使用MySQLi会有多么棘手。