2013-04-02 5 views
0

Я запускал серию игр, в которых победители получают определенное количество очков в конце каждой игры. Я пытаюсь написать сценарий, который генерирует «таблицу лидеров» - по существу, сохраняет текущую оценку совокупных показателей различных игроков. Я объясню свою проблему на примере:Сценарий для ведения подсчета списка

Группа друзей (Алиса, Брайан, Кэрол ...) каждое утро играет в баскетбол и отслеживает, сколько очков каждый раз оценивает каждый день. Они хотят знать, сколько очков забито всего за всю неделю.

Когда они играли в понедельник утром, вот сколько очков каждый игрок набрал:

Alice: 3

Brian: 10

Carol: 5

все остальные: 0

Группа друзей снова сыграла во вторник. Вот баллы:

Алиса: 2

Давид: 3

Эмили: 8

все остальные: 0

И их оценки от игры в среду:

Carol : 6

David: 4

Frank: 2

все остальные: 0

Они хотят знать, в конце каждого дня, который набрал наибольшее количество очков до сих пор, так что они пишут сценарий для отслеживания.С их оценки в качестве входных данных каждый день, вот что возвращает их сценарий:

понедельник требуемый выход:

  1. Брайан (10)
  2. Carol (5)
  3. Алиса (3)
выход

вторник:

  1. Брайан (10)
  2. Эмили (8)
  3. Алиса (5)
  4. Carol (5)
  5. David (3)

И выход в среду:

  1. Carol (11)
  2. Brian (10)
  3. Emily (8)
  4. Дэвид (7)
  5. Алиса (5)
  6. Frank (2)

Если я ставлю результаты каждый день в таблицу SQL, есть способ, с помощью SQL или PHP для получения отсортированного списка от общего балла?

Заранее благодарим за помощь, и если я услышу решение или найду его самостоятельно, я отправлю его здесь, чтобы люди могли его использовать в будущем.

+0

Это вопрос домашнего задания? –

ответ

0

Если таблица SQL устанавливается как:

name day score 
Alice M  2 
Bob  M  3 
Carol M  1 
Alice T  2 
Bob  T  4 
David T  1 
etc... 

Тогда ваш SQL код будет

SELECT name, SUM(score) FROM table GROUP BY name 

Это, если вы не смогли расшифровать с помощью кода, дал бы что-то вроде:

name score 
Alice 4 (or whatever it actually is) 
Bob  5 (or whatever...) 
etc... 

(редактирование: забыли запятой в операторе SQL)

+0

Спасибо, Джон! Последний вопрос, есть ли способ, чтобы результат сортировался по общим баллам? (Как в вашем примере, вывод, если он показывает Боб 5 до Алисы 4.) – Linearts

+0

Полностью пропустил эту часть вашего вопроса, извините.Я думаю, что самый простой способ будет 'SELECT, имя, SUM (оценка) AS total_score' ' FROM таблицы' ' GROUP BY имя' ' ORDER BY total_score' Ключевым моментом здесь является "ORDER BY" заявление – John

+0

Хорошо, я буду реализовывать это сегодня вечером, размещать его на веб-странице и редактировать ссылку на вопрос, чтобы люди могли видеть, как все работает. Благодаря! Редактировать: я бы поднял вас, но, видимо, у меня пока нет достаточной репутации, извините =/ – Linearts

0
DROP TABLE #TempTest 
CREATE TABLE #TempTest (
     ID int IDENTITY(1,1) 
     ,Name varchar(10) 
     ,Points int 
     ,MatchDate datetime 
     ) 

INSERT INTO #TempTest (Name,Points,MatchDate) 
SELECT 'Alice',3,'1/1/2013' 
UNION 
SELECT 'Brian',10,'1/1/2013' 
UNION 
SELECT 'Carol',5,'1/1/2013' 
Union 
SELECT 'Alice',2,'1/2/2013' 
UNION 
SELECT 'David',3,'1/2/2013' 
UNION 
SELECT 'Emily',8,'1/2/2013' 
UNION 
SELECT 'Carol',6,'1/3/2013' 
UNION 
SELECT 'David',4,'1/3/2013' 
UNION 
SELECT 'Frank',2,'1/3/2013' 

SELECT * FROM #TempTest 

SELECT Name,SUM(Points) AS TotalPoints FROM #TempTest 
WHERE MatchDate <='1/1/2013' 
GROUP BY Name 
ORDER BY SUM(Points) DESC 

SELECT Name,SUM(Points) AS TotalPoints FROM #TempTest 
WHERE MatchDate <='1/2/2013' 
GROUP BY Name 
ORDER BY SUM(Points) DESC 

SELECT Name,SUM(Points) AS TotalPoints FROM #TempTest 
WHERE MatchDate <='1/3/2013' 
GROUP BY Name 
ORDER BY SUM(Points) DESC 

Вам необходимо добавить сортировку по убыванию точек, чтобы обеспечить правильное отображение платы.

+0

Разве это не дало бы результаты дня, даже в более поздние дни? Мне не нужно знать, кто был на первом месте в понедельник, если они уже играли в среду. Я просто хочу иметь возможность запускать скрипт в конце дня и получить общее количество всех игр, которые были воспроизведены до настоящего времени. – Linearts

+0

Последние три оператора выбора - это образцы, показывающие, что произойдет в каждый день. Вопрос состоял в том, как это сделать, и это должно было показать, как это сделать. Я бы ожидал, что каждый день будет заменять день, а не запускать скрипт как есть. Если вы оставите дату, это даст вам общее количество – David

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