2015-12-14 3 views
3

Итак, если мой заголовок немного запутан, что я считаю. И, кстати, я использую API-интерфейс medoo для своего sql, так что это всего лишь небольшая информация, так что вы не путаете следующие примеры.Подсчет числа находок столбца

Пример ТАБЛИЦА

+----+------------+----------------+-------------+ 
| id | playerName | infractionType | infractedBy | 
+----+------------+----------------+-------------+ 
| 1 | Alpha  | ET1   | Admin  | 
| 2 | Alpha  | ET1   | Admin  | 
| 3 | Alpha  | ET1   | Admin  | 
| 4 | Delta  | ET1   | Admin  | 
| 5 | Echo  | ET1   | Admin  | 
| 6 | Echo  | ET1   | Admin  | 
| 7 | Delta  | ET1   | Admin  | 
| 8 | Alpha  | ET1   | Admin  | 
+----+------------+----------------+-------------+ 

Хорошо, так что давайте перейдем к основам. Если вы делаете петлю Еогеасп так:

foreach ($medoo->query("SELECT * FROM table1) as $entry) { 
    echo $entry['playerName']; 
} 

Так как вы должны знать, что будет печатать все Playername. Теперь я хочу, чтобы распечатать происхождение playerName и выйти из него. Таким образом, для неупорядоченной печати, код будет где-то вдоль этих линий:

foreach ($medoo->query("SELECT DISTINCT playerName FROM table1) as $entry) { 
    echo $entry['playerName']; 
    echo $medoo->count("infractions", ["playerName" => $entry['playerName']); 
} 

ОДНАКО КАК УКАЗАНО «ЭТО НЕ ORDERED», что я хочу, чтобы заказать который я не имею ни малейшего понятия о том, как это сделать так. Я просмотрел весь google, увидев команду count() 'sql, но для меня это вообще бесполезно, насколько я вижу.

То, что я хочу знать

  • Есть ли SQL заявление, которое будет соответствовать моим потребностям? Если так, то, что это.
  • Если это невозможно с SQL STATEMENT, то возможно ли создать сортировку с помощью php? (Я так считаю лично).


Текущий код

foreach ($GoldenData->query("SELECT DISTINCT playerName FROM infractions") as $player) { 
foreach ($GoldenData->query("SELECT COUNT(playerName) AS playerName FROM infractions WHERE playerName = '" . $player['playerName'] ."' ORDER BY COUNT(playerName) DESC") as $infracted) { 
echo "<tr>"; 
echo "<td>"; 
echo $player['playerName']; 
echo "</td>"; 
echo "<td>"; 
echo $infracted['playerName']; 
echo "</td>"; 
echo "<tr>"; 
} 
} 

То, что я хочу ОБЪЯСНЕНИЕ

Это также в комментариях, но я просто добавить его здесь так что другие люди могли видеть это лучше.

Таким образом, идея состоит в том, чтобы сортировать по счету TOTAL INFRACTIONS и упорядочивать их по убыванию (от большей до минимума). Теперь проблема заключается в том, что у меня нет столбца «totalInfractions», который я не хочу добавлять, если нет НИКАКОГО ДРУГОГО способа сделать это без столбца. Поэтому вопрос заключается в том, можно ли это сделать без добавления столбца «totalInfractions» или если есть другой способ сделать это с помощью других SQL STATEMENTS или PHP Functions.


Если вы не понимаете что-то, пожалуйста, сообщите мне, и я попробую его очистить. Я понимаю, что я прошу, это немного запутанно.

+0

я не понимаю, что вывод, который вы ожидаете –

+6

я нахожу ваш вопрос запутанным. Вы хотите, чтобы «SELECT playerName, COUNT (playerName) AS возникло из таблицы 1 GROUP BY playerName ORDER BY Вступление DESC '? – markdwhite

+0

@ Выход Dagon в основном totalInfractions и имя игрока в порядке убывания. – RepeaterCreeper

ответ

1

Если я понимаю, чего вы хотите достичь ...

Я побежал этот запрос:

SELECT COUNT(id), playerName from Example group by playerName; 

И выход был таков:

+-----------+------------+ 

| count(id) | playername | 

+-----------+------------+ 

|   4 | Alpha  | 

|   2 | Delta  | 

|   2 | Echo  | 

+-----------+------------+ 

Что мы делаем, Counting каждый идентификатора (так как каждая запись представляет собой одинарное правонарушение, это эквивалентно подсчитывая количество нарушений), а затем GROUPing by playerName, чтобы мы получили общее количество для каждого игрока. Это близко к тому, что вы пытаетесь сделать?

Приносим извинения за плохо отформатированную копию/вставку таблицы результатов, я не уверен, как заставить ее выглядеть лучше.

Если в будущем вы добавите больше нарушений, вам может понадобиться примерно следующее: SELECT COUNT (id), playname, infractionType из примера GROUP BY infractionType, playname;

, который даст результаты, как это:

+-----------+------------+----------------+ 

| count(id) | playername | infractionType | 

+-----------+------------+----------------+ 

|   3 | Alpha  | ET1   | 

|   1 | Delta  | ET1   | 

|   1 | Alpha  | ET2   | 

|   1 | Delta  | ET2   | 

|   2 | Echo  | ET2   | 

+-----------+------------+----------------+ 
+0

Запрос было не совсем правильно, но это дало мне основное утверждение, и все, что мне нужно было сделать, это в основном отредактировать запрос, который вы мне дали, и сделать его «SELECT playerName от нарушений GROUP BY playerName ORDER BY COUNT (имя игрока) DESC'. Но в любом случае спасибо за то, что он дал мне представление о том, как это сделать. Никогда не ожидал, что это будет так просто, я думаю, что я уже слишком усложнял ситуацию. – RepeaterCreeper