2015-01-27 3 views
1

Используемые технологии: php, доступ к MySQL через PDO.Результаты подсчета результатов, возвращаемые в php, эффективно

У меня есть следующий запрос:

try { 
     $stmt = $conn->prepare("SELECT * FROM $database.appsLodged WHERE `uID` = :uid"); 
     $stmt->bindValue(':uid', $uid); 
     $stmt->execute(); 
     $result = $stmt->fetchAll(); 
    } catch(PDOException $e) { catchMySQLerror($e->getMessage()); } 

Который является довольно прямо вперед. На данный момент в соответствующей базе данных имеется 7 строк, и каждый из них может иметь другое строковое значение, возвращаемое для $ result [0] [5]. Я хотел бы иметь возможность подсчитать, сколько результатов есть, которые имеют $ result [0] [5] из «обуви и носков», а затем сколько из них имеют $ result [0] [5] «сапоги и юбки», и сколько из них имеют $ result [0] [5] «перемычек и кардиганов» - без необходимости прибегать к выполнению нескольких запросов к базе данных (я знаю, что мы можем сделать это, добавив дополнительный «И =: элемент» синтаксис и привязка :. пункт в «обувь и носки», но это, кажется, очень повторяющихся и ненужных

предложения, пожалуйста, все приветствуются :)

C

в соответствии с просьбой ниже, здесь $ результат массива в списке:

Array 
(
[0] => Array 
    (
     [id] => 1 
     [0] => 1 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Pending 
     [5] => Pending 
     [dateStarted] => 1421773018 
     [6] => 1421773018 
     [lastModified] => 1421773018 
     [7] => 1421773018 
    ) 

[1] => Array 
    (
     [id] => 2 
     [0] => 2 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1421774389 
     [6] => 1421774389 
     [lastModified] => 1421774389 
     [7] => 1421774389 
    ) 

[2] => Array 
    (
     [id] => 3 
     [0] => 3 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1421776146 
     [6] => 1421776146 
     [lastModified] => 1421776146 
     [7] => 1421776146 
    ) 

[3] => Array 
    (
     [id] => 4 
     [0] => 4 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1421777460 
     [6] => 1421777460 
     [lastModified] => 1421777460 
     [7] => 1421777460 
    ) 

[4] => Array 
    (
     [id] => 5 
     [0] => 5 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1421781756 
     [6] => 1421781756 
     [lastModified] => 1421781756 
     [7] => 1421781756 
    ) 

[5] => Array 
    (
     [id] => 6 
     [0] => 6 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422213946 
     [6] => 1422213946 
     [lastModified] => 1422213946 
     [7] => 1422213946 
    ) 

[6] => Array 
    (
     [id] => 7 
     [0] => 7 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422238026 
     [6] => 1422238026 
     [lastModified] => 1422238026 
     [7] => 1422238026 
    ) 

[7] => Array 
    (
     [id] => 8 
     [0] => 8 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422369458 
     [6] => 1422369458 
     [lastModified] => 1422369458 
     [7] => 1422369458 
    ) 

[8] => Array 
    (
     [id] => 9 
     [0] => 9 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422369473 
     [6] => 1422369473 
     [lastModified] => 1422369473 
     [7] => 1422369473 
    ) 

[9] => Array 
    (
     [id] => 10 
     [0] => 10 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422371233 
     [6] => 1422371233 
     [lastModified] => 1422371233 
     [7] => 1422371233 
    ) 

[10] => Array 
    (
     [id] => 11 
     [0] => 11 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422371291 
     [6] => 1422371291 
     [lastModified] => 1422371291 
     [7] => 1422371291 
    ) 

[11] => Array 
    (
     [id] => 12 
     [0] => 12 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422372793 
     [6] => 1422372793 
     [lastModified] => 1422372793 
     [7] => 1422372793 
    ) 

[12] => Array 
    (
     [id] => 13 
     [0] => 13 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422373414 
     [6] => 1422373414 
     [lastModified] => 1422373414 
     [7] => 1422373414 
    ) 

[13] => Array 
    (
     [id] => 14 
     [0] => 14 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422373681 
     [6] => 1422373681 
     [lastModified] => 1422373681 
     [7] => 1422373681 
    ) 

[14] => Array 
    (
     [id] => 15 
     [0] => 15 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422373927 
     [6] => 1422373927 
     [lastModified] => 1422373927 
     [7] => 1422373927 
    ) 

[15] => Array 
    (
     [id] => 16 
     [0] => 16 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422374004 
     [6] => 1422374004 
     [lastModified] => 1422374004 
     [7] => 1422374004 
    ) 

[16] => Array 
    (
     [id] => 17 
     [0] => 17 
     [appID] => 4 
     [1] => 4 
     [applicationKey] => ConSupAp 
     [2] => ConSupAp 
     [applicationName] => Conference Support Application 
     [3] => Conference Support Application 
     [uID] => 1 
     [4] => 1 
     [status] => Data Acquisition 
     [5] => Data Acquisition 
     [dateStarted] => 1422374587 
     [6] => 1422374587 
     [lastModified] => 1422374587 
     [7] => 1422374587 
    ) 

) 

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

ответ

0

Я предлагаю вам сделать следующее: во-первых, вы берете от вас базы данных все эти строки, так что вы будете иметь что-то вроде $result[0][5], $result[1][5], $result[2][5] и так далее, то вам foreach() их и сопоставить строки в различных переменных , по одному для каждой строки, которую вы хотите сопоставить ... Я думаю, на основании того, что вы сказали в запросе, что каждый uID имеет один тип строки в позиции [5]. В ведьме случае, я советую вам иметь строку идентификаторов, поэтому ваш запрос становится чем-то вроде этого:

$uid = '1,2,3,4,5'; // for example 
$stmt = $conn->prepare("SELECT * FROM $database.appsLodged WHERE `uID` IN (:uid)"); 

$stmt->bindValue(':uid', $uid); 

вам, вероятно, потребуется один дополнительный запрос, чтобы принять все эти идентификаторы, но именно об этом: D

Надеюсь это поможет!

+0

для правильного запроса, пожалуйста, просмотрите отредактированную версию моего ответа :) –

+0

Спасибо за ответ, так же быстро! Простите, что я не знал о значении $ uid - это никогда не изменяется, так как это идентификатор пользователя, и поэтому он будет тянуть только строки из таблицы db, связанные с этим конкретным пользователем. Он не изменяется и поэтому не имеет отношения к реальному вопросу. – Cassandra

+0

Но как у вас есть несколько значений в $ result [0] [5], то? повторяете ли вы этот запрос для пользователя? –

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