2014-09-15 3 views
0

У меня есть сайт, который будет оценивать пользователей на основе очков, которые они заработали для выполнения определенных действий. Это моя структура базы данных:PHP Ranking Algorithm

pointsentered
1. ID
2. Email
3. Код

pointvalues ​​
1. ID
2. Код
3. Название
4. Значение

У меня есть файл, который подключается к pointentered и отправляет выбранный пользователем. Поле «Код» соответствует точкам.

В pointvalues ​​ «Название» соответствует названию события, которое они завершили. Код представляет собой простой буквенно-цифровой код, соответствующий этому конкретному событию, и значение, которое оно имеет. «Значение» достаточно понятно для себя, поскольку оно содержит значение точки, к которому относится событие.

По сути, я хочу, чтобы иметь сценарий, который
1. ранги всех пользователей (которые имеют различные электронные письма) на основе введенных точек в pointsentered (но хватают очки из pointvalues ​​ на основе «Кодекс») 2. Показывает, сколько очков пользователь достиг. Это относится к электронной почте пользователя.

Очевидно, что я не ищу, чтобы кто-то сделал это для меня, я просто ищу некоторые рекомендации о том, как начать, поскольку я потерян.

Заранее спасибо.

+0

Пожалуйста, поделитесь с нами тем, что вы пробовали. –

+0

@JayBlanchard Я еще не пытался это сделать, потому что я не уверен, с чего начать, какие функции использовать и т. Д. Я не ищу, чтобы кто-то сделал это для меня, только где-то начать. –

ответ

0

Это должно быть довольно легко достичь с помощью простого запроса по линиям:

SELECT pe.Email, SUM(pv.Value) as 'total_points' FROM pointsentered pe 
JOIN pointvalues pv ON pe.Code = pv.Code 
GROUP BY pe.Email 
ORDER BY total_points DESC 

Что происходит здесь у вас есть две таблицы pointsentered и pointvalues. В таблице pointsentered содержится Email (pe.Email) человека, которому были награждены очки. Также в этой таблице находится Code (pe.Code), которая соответствует строке в таблице pointvalues. Поэтому мы можем запросить у pointsentered и JOIN таблицу pointvalues, чтобы получить список всех выигранных баллов, электронное письмо человека, который был награжден, и количество полученных баллов. Мы также можем применять агрегированную функцию к значениям точек (SUM) и группе по электронной почте лиц, предоставляя список всех уникальных электронных писем вместе с общим количеством баллов, присваиваемых этому электронному письму, начиная с наибольшего количества общих баллов (DESC).

+0

Спасибо за быстрый ответ ... Не могли бы вы просто прояснить разные части этого? Например, «pe.email» и «pv.Value» и т. Д. –

+0

Это очень помогает, спасибо. Поэтому, когда у вас есть «pe.Email» и «pv.Value» и т. Д., Я могу просто написать «Email» или «Value?« –

+0

вы можете до тех пор, пока имена столбцов не являются двусмысленными, при объединении нескольких таблиц его приятно дать псевдонимы имен таблиц, чтобы вы могли легко и явно объявить, в каком столбце и в какой таблице вы ссылаетесь –