Помогите составить хиртый запрос вместо глупого+обработки

Koryan

Новичок
Помогите составить хиртый запрос вместо глупого+обработки

Есть такой код:
PHP:
$num = 0;

$res = mysql_query("SELECT id FROM users ORDER BY rating DESC, lastvisit DESC, register DESC")  or die("Invalid query: " . mysql_error());

do {
	$num++;
	$arr2 = mysql_fetch_row($res);
	} while (($arr2) and ($arr2[0] != $myid));

$myplace = $num;
Запрос к мускулу вынимает порядка 5к записей отсортированных в хитром порядке по трём параметрам. А дальше в цикле ищется порядковый номер записи с данным id (типа рейтинг записи в таблице вынутой с такой сортировкой) - $myplace.

Процедура очень долгая. Очень нужно придумать запрос к бд, который бы выдавал искомое.

Вся проблема в том что сортировка ведётся по трём параметрам :( Если бы он был один -
PHP:
"SELECT COUNT(*) FROM users WHERE rating < (SELECT rating FROM users WHERE ".$myid." = id)"
Но их блин три :( :( :( Весь мозг себе уже сломал :(
 

HEm

Сетевой бобер
PHP:
$res = mysql_query("SELECT * FROM users WHERE id=".$myid);
$arr = mysql_fetch_array($res);

$res = mysql_query("SELECT COUNT(*) AS co FROM users WHERE rating<".$arr['rating']." AND lastvisit<".$arr['lastvisit']." AND register<".$arr['register']);
 

Koryan

Новичок
Вообще не то. AND с WHERE совсем не так работают как ORDER BY по нескольким параметрам
 

Bitterman

Новичок
Не проверял, но, по-моему, вариант, который предложил Hem, должен работать, только во втором запросе нужно оставить ограничение только по полю rating. То есть
Код:
$res = mysql_query("SELECT COUNT(*) AS co FROM users WHERE rating<" . $arr['rating']);
------------------------------------------------------

Правда. тут будет проблема, если существует несколько юзеров с одинаковыми рейтингами. Тут уже, наверное, надо будет делать дополнительную проверку, но она не должна занять много времени.
 

dark-demon

d(^-^)b
Код:
select count(distinct t1.id) from table as t1, table as t2 where t2.id=123 and (t1.rating>t2.rating or (t1.rating=t2.rating and t1.lastvisit>t2.lastvisit))
идея я думаю ясна...
 

Bitterman

Новичок
dark-demon
И что это? Зачем брать значения из джойненной таблицы если они уже известны?

А так вообще да, если поизвращаться с WHERE, то можно добиться большей точности.
 

Bitterman

Новичок
dark-demon
Насколько я понял, сначала мы получаем список, который нужен в любом случае. Если сам список не нужен, то тогда да, надо юзать твой запрос.
 
Сверху