Bạn có ý tưởng đúng. Tuy nhiên, MySQL không đảm bảo thứ tự đánh giá các biểu thức. Ngoài ra, bạn có group by position
trong truy vấn con.
Vì vậy, tôi nghĩ bạn có thể muốn:
SELECT . . .
FROM (SELECT name, surname, position, value, points,
(@num := if(@type = position, @num + 1,
if(@type := position, 1, 1)
)
) AS row_number
FROM players p CROSS JOIN
(SELECT @num := 0, @type := '') params
WHERE (name LIKE '%$searchphrase%' OR surname LIKE '%$searchphrase%') AND
value >= '$minvalue' AND value <= '$maxvalue'
ORDER BY position
) x
WHERE x.row_number <= 2