2016-11-07 4 views
0

В моей базе данных SQL у меня есть одна таблица с некоторыми элементами с колонки, которые являются тип ENUM и имеет 3 варианта: «отложенный», «скидка», «получил»Вычислить процент столбца типа ENUM с PHP

Как могу ли я напечатать процент популяции «полученного» варианта, например (В моей таблице у меня есть 40% от «полученного» варианта, который выбран)?

Спасибо!

ответ

0

Чтобы получить итоговые данные для каждого довольно прост (если вашего столбца перечислимого называется «статусом» и имеет столбец с именем ID):

SELECT status, count(id) FROM myTable GROUP BY status; 

Хотя можно было бы написать запрос для расчета фактические проценты, самое простое, что оттуда делать математику себя

Если вы решили использовать MySQLi для запуска запроса, код будет выглядеть примерно так:

// create mysqli connection 
$mysqli = new mysqli("example.com", "user", "password", "database"); 
if ($mysqli->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 

$res = $mysqli->query("SELECT status, count(id) AS subtotal FROM myTable GROUP BY status"); 
$totals = array(); 
while ($row = $res->fetch_assoc()) { 
    $totals[$row['status']] = $row['subtotal']; 
} 

Это даст вам массив как ['pending' => 100, 'discount' => 200, 'received' => 50]):

$total = $result['pending'] + $result['discount'] + $result['received']; 
$pctPending = ($result['pending']*100)/$total; 

анс так далее. Разумеется, вам нужно будет скорректировать код, чтобы он соответствовал возвращаемым результатам, но математика применяется независимо.

+0

На самом деле я не использую пока печатать выходные данные. Я использую что-то вроде этого (я адаптировался с вашим кодом): $ result = mysql_fetch_array (mysql_query ("SELECT status, count (id) FROM myTable GROUP BY status;")); Используя ваш пример для этого запроса, вывод возвращает «pending» – Adrian

+0

Hm. Запрос фактически вернет три строки, каждая строка со статусом и счетчиком. Итак, как вы догадались, вам придется использовать цикл while, чтобы получить все три значения. Попробуйте выполнить запрос непосредственно в любом инструменте базы данных, который вы используете, чтобы взглянуть на результаты, и это должно вести ваше кодирование. Однако также обратите внимание, что вы никогда не должны использовать методы mysql_ *. Они устарели, и в последней версии php их вообще нет. Альтернативами являются mysqli и PDO. – Jerry

+0

некоторые (немного более сложные, чем необходимо) примеры использования 'mysqli' для выполнения оператора и циклического анализа результатов [здесь] (http://php.net/manual/en/mysqli.quickstart.statements.php) – Jerry