2013-05-09 3 views
1

Я работаю над тем, как реализовать таблицу лидеров. То, что я хотел бы сделать, - это сортировать таблицу несколькими различными фильтрами (оценка, количество представлений, среднее значение). Таблица может выглядеть так.Mysql сортировка по

+--------+-----------------------+------+-----+---------+-------+ 
| Field | Type     | Null | Key | Default | Extra | 
+--------+-----------------------+------+-----+---------+-------+ 
| userID | mediumint(8) unsigned | NO | PRI | 0  |  | 
| score | int     | YES | MUL | NULL |  | 
| numSub | int     | YES | MUL | NULL |  | 
+--------+-----------------------+------+-----+---------+-------+ 

И набор образцов данных следующим образом:

+--------+----------+--------+ 
| userID | score | numSub | 
+--------+----------+--------+ 
| 505610 | 1245  | 2  |  
| 544222 | 1458  | 2  | 
| 547278 | 245  | 1  | 
| 659241 | 12487 | 8  | 
| 681087 | 5487  | 3  | 
+--------+----------+--------+ 

Мои запросы будут приходить с PHP.

// get the top 100 scores 
$q = "select userID, score from table order by score desc limit 0, 100"; 

это возвращает набор идентификатора пользователя/счет отсортирован высокий балл первого у меня есть запрос для сортировки по numSub (количеству заявок)

То, что я хотел бы для сортировки таблицы по avg оценка, что оценка/numSub; Таблица может быть большой, поэтому эффективность важна для меня.

Заранее благодарен!

ответ

2

Если эффективность имеет важное значение, а затем добавить столбец avgscore и присвоить ей значение score/numsub. Затем создайте индекс в столбце.

Вы можете использовать триггер insert/update для автоматического вычисления среднего значения при добавлении или изменении строки.

Как только ваши столы станут большими, сортировка займет заметное количество времени.

1

Насколько я вижу, нет причин усложнять ситуацию;

SELECT userID, score/numsub AS average_score 
FROM Table1 
ORDER BY score/numsub DESC; 
+0

Не понял, что смог обработать в порядке ... теперь чувствую себя немым. – vbbartlett

+0

Как я могу вернуть фактический avg вместо оценки? – vbbartlett

+0

@vbbartlett Обновлен ответ с этим изменением. –

Смежные вопросы