Raggruppamento valori di un intervallo

JRCash

Nuovo Utente
12 Nov 2014
11
0
0
Ciao a tutti, sono nuovo, avrei un problema:
in un form inserisco dei dati: "codice" e "peso"; dopo devo estrarli da MySQL in modo che stiano entro un range....cioè...esempio:
01 1100
02 1097
03 1103
etc....

Adesso li voglio visualizzare raggruppati in modo che la differenza massima fra i pesi sia di 5.
Quindi se prendo 1100 e 1097 il 1103 non va bene perché la differenza max è 6.

Lavorerò con un numero indefinito di elementi.

Spero di essere stato chiaro, grazie a tutti
 

JRCash

Nuovo Utente
12 Nov 2014
11
0
0
Mi spiego meglio:
Sto creando un magazzino in cui inserisco i valori di pale per eliche. Io poi le dovrò accoppiare in modo che la differenza massima di peso fra le pale sia di 5 grammi. Vorrei visualizzarle in gruppi in modo da avere, visivamente, un'idea degli accoppiamenti possibili.
Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
scusa ma non si capisce bene, faccio un esempio, tu hai esempio
01 1100
02 1097
03 1104
04 1105
05 1106
06 1112
ecc...

vuoi che impostando un peso, es. 1104, salti fuori solo
03 1104
04 1105
05 1106

o per raggruppamento in qualche modo suddivise,es.
1097, 1100
1104, 1105, 1106
1112
 

JRCash

Nuovo Utente
12 Nov 2014
11
0
0
È giusta la seconda! In sostanza non ho un valore di riferimento. Devo fare in modo che i valori si confrontino con loro stessi.....
 

JRCash

Nuovo Utente
12 Nov 2014
11
0
0
È giusta la seconda. Non ho un valore di riferimento, ma devo fare in modo che i valori si confrontano con loro stessi....mamma come è difficile spiegarlo!
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Quindi i raggruppamenti devono avere una differenza massima di 5 tra il minimo e il massimo, esatto?
Ma i raggruppamenti esistono già e devi solo fare un controllo o li devi creare?
1) esistono già:
E' un semplice controllo tra il valore del minimo e del massimo.

2) devi crearli:
Parti dal primo che trovi e inserisci nel raggruppamento tutti i pesi che rientrano nel range e quando trovi uno che non è nel range (differenza massima di 5) allora crei un altro raggruppamento.
Se non sai quanti sono con php non c'è alcun problema perché non devi dichiarare prima la dimensione degli array.
 

JRCash

Nuovo Utente
12 Nov 2014
11
0
0
Giusta la seconda, ma quando inserisco il 4 valore (per esempio) deve essere in tolleranza contemporanea con i primi 3, il quinto con i primi 4 e via così.
 

JRCash

Nuovo Utente
12 Nov 2014
11
0
0
Non riesco a rispondere con TapaTalk!!! comunque il caso esatto è quello espresso al punto 2 di Long8....però io non ho un valore di riferimento, quindi devo dividere in gruppi in cui la DIFFERENZA MASSIMA è 5 grammi. es --> l'elemento 6 deve essere entro i 5 con gli elementi 1,2,3,4,5 poi, l'elemento 7 deve esserlo con 1,2,3,4,5,6 e così via....quando non si riesce ad aggiungere elementi al gruppo si passa al gruppo dopo con un intervallo diverso (range di sempre di 5, ma con valori diversi).
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
buttata giù così al volo quindi non so se funzia
PHP:
<?php
//...
$q="SELECT * from tabella ORDER BY peso";//estrai per ordine di peso
//...
$delta = 3; //differenza di peso
$conta=0; //un contaore per l'array
//leggi la tabella
while($riga=mysqli_fetch_array($ris)){
	$id=$riga['id'];
	$peso=$riga['peso'];
	if($conta==0){
		$suddivisione[$conta]=$riga['peso'];//è il primo item
	}else{
		if( $suddivisione[$conta-1] <= $peso- $delta){//l'item rientra appena letto nel tange
			$suddivisione[$conta-1] .=", ".$peso;//concateni
		}else{
			$conta++;//incrementi il contatore
			$suddivisione[$conta]=$peso;//crei un nuovo item dell'array
		}
	
	}
}
foreach($suddivisione as $val){
	echo "$val<br />";//mostri i raggruppamenti
}
//......
?>
come detto buttato giù quindi, se funziona va comunque affinato
 

JRCash

Nuovo Utente
12 Nov 2014
11
0
0
Io pensavo di usare un campo tabella come flag a 0 fare un controllo ricorsiva in cui i valori se soddisfano -5 <P1-P2 || P1-P2 > 5 se ok: flag = 1. Poi passo a P2-P3 in cui controllo solo i flag a 0 e setto quelli ok a 2 e così via! Poi echo tutti i flag 1 poi i 2 e via così. ....credo possa funzionare! Ps: per me è più semplice così senza array perché in realtà ogni record ha 5 campi da gestire. Ggrazie
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
non sapendo su quanti elementi dovrai lavorare, io cercherei di fare i calcoli direttamente sul db,
anche usando una tabella temporanea, in pratica,
per ciascun elemento presente nella tabella codice,peso
calcolerei la differenza con gli altri elementi escludendo quelli superiori al peso di riferimento
quindi li metterei in una tabella con codice1, codice2, peso1, peso2, diffpeso
a questo punto listando la tabella ordinata per codice1, diffpeso, codice2
dovrei ottenere il risultato che ti serve

se posti un file con codice e peso potrei provare
ciao
Marino
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
PHP:
<?php 
$conn = new mysqli("localhost", "root", "", "database"); 
if ($conn->connect_error) {
  trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);
}

$ris = $conn->query("SELECT * from tabella ORDER BY peso");//estrai per ordine di peso 
$delta = 5; //differenza di peso 
$elemento = 0; //un contatore di elementi nel gruppo
$gruppo = 0; //numero del gruppo

while($riga=mysqli_fetch_array($ris)){ //leggi la tabella 
    $peso=$riga['peso']; 
    if($elemento==0){ //se è il primo elemento
        $suddivisione[$gruppo][$elemento]=$peso;//è il primo item 
    }else{
        if( ($peso >= max($suddivisione[$gruppo])-$delta) && ($peso <= min($suddivisione[$gruppo])+$delta) ){//se il peso rientra nel range 
            $suddivisione[$gruppo][$elemento] = $peso;//aggiungo il peso allo stesso gruppo
        }else{ //cambio gruppo
        	$gruppo++;
			$elemento=0;
			$suddivisione[$gruppo][$elemento] = $peso;
        } 
    } 
	$elemento++;//incremento il contatore 
} 
//STAMPA
foreach($suddivisione as $key => $val){
	echo "gruppo: $key<br>";
	foreach($val as $valore) {
    	echo "$valore<br>";
	}
} 
?>
L'ho testato e funziona.
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
P [risolto] Problema funzione raggruppamento di elementi Javascript 4
E JQRY + XML piccola rubrica con ordinamento e raggruppamento jQuery 1
M Algoritmo per raggruppamento MySQL 0
U raggruppamento date con javascript Javascript 6
L Raggruppamento date Classic ASP 2
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
G Invio di più valori con la stessa checkbox PHP 4
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
C prendere dei valori da Plugin e inserirli nel database joomla Joomla 0
F Stampare valori di un database PHP 14
T Recupero valori tramite $_GET PHP 4
otto9due Inserire o aggiornare tabella my sql controllando una coppia di valori PHP 7
M Problemi con la stampa dei valori in php PHP 1
M Passaggio Valori checbox in textarea Javascript 1
D passare valori da database sql a php PHP 1
O Recupero valori da listato Javascript 0
R Raggruppare valori array PHP 5
R Estrarre valori duplicati più volte PHP 0
T recupero valori select multipla da android Javascript 3
L estrarre valori max tra più tabelle MySQL 2
MarcoGrazia Valori di ritorno json via ajax non visti. jQuery 1
N VENDITA CORSO DROPSHIPPING LUCA VALORI Altri Annunci 0
A Ottenimento valori presenze istantanee MySQL 8
S Come filtrare valori di un array PHP 4
L Estrazione valori max su più campi MySQL 4
G Controllare valori in 2 tabelle PHP 5
X [Select] Valori chiave non presenti in un'altra tabella MySQL 2
G MariaDB non restituisce dei valori PHP 7
M Estrarre valori MAX da un db con una left join MySQL 8
S Istruzione sql valori "simili" PHP 7
C [PHP] Estrarre da una classe i valori che mi interessano PHP 5
S [PHP] Confrontare due array con valori quasi uguali PHP 2
D [PHP] Tabella: modificare direttamente i valori PHP 6
MarcoGrazia [PHP] Unioni di due array con somma di valori PHP 6
B inserire valori da una tabella a un altra mysql PHP 34
M [PHP] Recuperare coppia con valori i valori MAX e coppia con valori MIN PHP 26
Tommy03 [PHP] Media valori presi da una query PHP 3
M Filtrare risultati con valori checkbox passati con jquery jQuery 2
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
G [ASP] Ciclare i valori di 2 array Classic ASP 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
R php Somma valori in file csv PHP 2
A sommare valori a video per lo stesso giorno jQuery 1
E [PHP] Istruzione condizionale con valori booleani PHP 16
S [Javascript] come estrarre valori array e inserirli in diverse variabili Javascript 1
C [PHP] Creare un Pulsante che ricopia valori di un campo in altro record PHP 4
elpirata [MySQL] Sostituire valori campi con dati casuali MySQL 4
K [PHP] Controllare dati database tra due valori PHP 18
alankanz [VBA] Valori Array in una cella Visual Basic 1
F INSERIRE IN UN'UNICA CASELLA DI TESTO REPORT ACCESS I VALORI DELLA TABELLA DI UN'INTERA COLONNA MS Access 2

Discussioni simili