problema raccapricciante php conteggio query

trattorino

Utente Attivo
23 Lug 2016
174
1
18
38
Ci sto ssbattendo la testa ore, ma non riesco a trovare una soluzione semplice senza incasinare la pesantezza con i processi di richiamo, in sostanza tramite usufruisco di una while per scaricarmi delle query es;

PHP:
while($row = mysqli_fetch_array($resultNumeroRep))
{
$reaction =  $row['reaction'];

}
la variabile $reaction mi scarica , facciamo un esempio, scarica 10 query guardate;
1
2
2
4
6
8
7
4
3
2
5
6
7
8
e qui viene il bello, quello che voglio fare e mi sto letteralmente scelvellando, e far in modo che riesco a conteggiare ad esempio i risultati '2' voglio prendere i risultati 2 e conteggiarli in questo caso come vedete sono 3, ho provato svariati modi ma senza risultati, ad esempio usando un contatore, inserire dentro il while $count++ e poi $count tutto dentro una if, ma da risultati ari a uno logicamente perche è dentro il while e cicla, riesco a prelevare il numero sono le la variabile $count la metto fuori dal while... avete ideee? cosa sbaglio mi sto perdendo in un bicchiere d'acqua
 

marino51

Utente Attivo
28 Feb 2013
2.904
160
63
Lombardia
non é molto chiara la tua richiesta, provo ancora con suggerire l'uso di count(*) nella query,
oppure con l'uso di un array per contare i diversi elementi
PHP:
$contatore = array();
while($row = mysqli_fetch_array($resultNumeroRep))
{
    $reaction =  $row['reaction'];

    if( empty($contatore[$reaction]) ) $contatore[$reaction] = 0;
    $contatore[$reaction] += 1;
}

// qui, il contatore é valorizzato con gli elementi presenti e contati
 
  • Like
Reactions: trattorino

macus_adi

Utente Attivo
5 Dic 2017
1.265
82
48
IT/SW
Semplicemente senza iterare il risultato, che è solo uno spreco di risorse potresti utilizzare (se non vuoi dar retta a @marino51 con il count nella query) la funzione nativa di php : "array_count_values".
Eviterei if inutili le performance sui piccoli numeri sono abbastanza evidenti, basta effettuare una prova con e senza "IF":
PHP:
while($row = mysqli_fetch_array($resultNumeroRep))
{
    $contatore[] = $row['reaction'];
}
print_r(array_count_values($contatore));
Cosa fa l'IF: Sta valutando ogni iterazione (perde sostanzialmente tempo).
Problema: all'aumentare delle reactions il tempo di elaborazione aumenta.
Provare per credere.
L'img sotto rappresenta sulla sinistra la soluzione con if, sulla destra la soluzione senza if.
 

Allegati

  • Like
Reactions: trattorino

trattorino

Utente Attivo
23 Lug 2016
174
1
18
38
mi da sempre lo stesso problema uso
PHP:
$contatore[$reaction] = 1;
$testss = count($contatore);
inserito dentro il while mi da questo
1
2
3
questo perche cicla tre volte, da tre risultati, il secondo suggerimemto devo inserirlo fuori dai while cosa che non posso fare

penso di essermi fatto capire, il while mi scarica tre risultati, usufruendo della variabile $reaction = $row['reaction']; mi scarica ad esempio 5 risultati

carlo
valerio
massimo
valerio
valerio

io voglio conteggiare valerio e nn tutti i risultati, dentro il while, come posso fare per prelevare il numero 3? il ciclo while me lo impedisce se inserisco un contatore mi da risultato 1 - 2 - 3 dovrei prendere l'ultimo risultato 3 per risolvere
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.265
82
48
IT/SW
Forse non hai visto bene la funzione di prima.... vedi cosa fa:
PHP:
$ar=['uno','due','tre','quattro','cinque'];
$data=[];
for($i=0;$i<25;$i++){
   $data[]=$ar[rand(0,count($ar)-1)];
}
print_r($data);
print_r(array_count_values($data));
output primo print_r
Codice:
Array
(
[0] => due
[1] => tre
[2] => uno
[3] => uno
[4] => due
[5] => uno
[6] => uno
[7] => tre
[8] => tre
[9] => uno
[10] => uno
[11] => cinque
[12] => cinque
[13] => quattro
[14] => quattro
[15] => uno
[16] => cinque
[17] => due
[18] => cinque
[19] => due
[20] => due
[21] => tre
[22] => quattro
[23] => cinque
[24] => quattro
)
Output secondo print_r
Codice:
Array
(
[due] => 5
[tre] => 4
[uno] => 7
[cinque] => 5
[quattro] => 4
)
Credo sia quello che a te serve.... nel caso specifico sapere quante volte è usata "uno"
PHP:
$conta=array_count_values($data);
print_r($conta['uno']);
 
  • Like
Reactions: trattorino