Tak więc chodzi o rozwiązanie z pkt. 1 -> post #4. Dla wspomnianego przez Ciebie przypadku:
`wartosc_1` `wartosc_2` `wartosc_3`
3684 628 253
5809 246 738
2649 226 97
1180 973 495
Podanie wartości kolumn:
`wartosc_1` = 5809
`wartosc_2` = 246
zwróci wynik: 3 (3 pozycja od największej).
Co ciekawsze, skoro `wartosc_1` jest unikalna i ją znasz, to nie potrzebujesz `wartosc_2` do znalezienia wiersza i jego pozycji, wystarczy unikalna `wartosc_1`
W tym wypadku kwerenda będzie wyglądała następująco (analogicznie jak w poście #4):
SELECT `pozycja`
FROM (SELECT `wartosc_1`, (@nr_wiersza:=@nr_wiersza+1) AS `pozycja`
FROM `nazwa_tabeli`, (SELECT @nr_wiersza:=0) `tmp` ORDER BY `wartosc_2` DESC) `tmp`
WHERE wartosc_1=5809;
Jej uchwyt:
new iPozycjaWierszaWynikowego;
if(SQL_NumResults(hUchwytKwerendy))
{
iPozycjaWierszaWynikowego = SQL_ReadResult(hUchwytKwerendy, SQL_FieldNameToNum(hUchwytKwerendy, "pozycja"));
}
else
{
log_amx("Nie znaleziono rekordu spelniajacego podane kryteria");
}
W zmiennej iPozycjaWierszaWynikowego przechowywana jest pozycja wiersza (po przesortowaniu wg kolumny `wartosc_2`, którego podana `wartosc_1` wynosiła 5809).
Czyli w uproszczeniu, iPozycjaWierszaWynikowego = 3.
Użytkownik _McHappy edytował ten post 10.04.2018 20:49