Ich habe einen PHP-Skript, um eine Liste der Spieler sortierte nach ihren „virtuellen Geld“ Anzeigen:PostgreSQL: mit row_number() in ausgelagerten Ausgang
$sth = $db->prepare("
select u.id,
u.first_name,
u.city,
u.avatar,
m.money,
u.login > u.logout as online
from pref_users u, pref_money m where
m.yw=to_char(current_timestamp, 'IYYY-IW') and
u.id=m.id
order by m.money desc
limit 20 offset ?
");
$sth->execute(array($_GET['offset']));
Um zu zeigen, eine Spielerposition in der Liste ich einen PHP-Variable verwenden $ pos, die beim Ausdrucken ihrer Namen und weiterer Daten in einer Schleife inkrementiert wird.
Ich möchte diese Position in der SQL-Anweisung anstelle von PHP aus verschiedenen Gründen haben. Also ich versuche folgendes:
$sth = $db->prepare("
select u.id,
row_number() + ? as pos,
u.first_name,
u.city,
u.avatar,
m.money,
u.login > u.logout as online
from pref_users u, pref_money m where
m.yw=to_char(current_timestamp, 'IYYY-IW') and
u.id=m.id
order by m.money desc
limit 20 offset ?
");
$sth->execute(array($_GET['offset'], $_GET['offset']));
Aber bekommen die ERROR: Fenster Funktionsaufruf erfordert eine OVER-Klausel
Ich versuche über (m.money) hinzufügen, aber bekommen ein Syntax-Fehler.
Ich bin wahrscheinlich Missverständnis der Window Functions doc.
Was ist "ein Syntaxfehler"? Und welche Syntax hast du versucht? Sie müssen OVER und eine ORDER BY verwenden, zeigen Sie uns, was Sie getan haben. OVER (ORDER BY m.money ASC) –
@nate c: Es ist eine vorbereitete Anweisung in PHP, ich denke nicht, dass SQL-Injection ein Problem sein wird. –