[PHP] numero progressivo su SELECT

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao a tutti,avrei bisogno del vostro aiuto.
Tramite una SELECT DISTINCT ottengo un'elenco filtrato dei valori di una colonna.
Ora avrei la necessità di ordinare questi valori per poi elaborarli uno a uno nell'ordine tramite un ciclo while e poi con mysqli_fetch_array.
Esempio
ottengo la seguente colonna e dovrei assegnare le relative priorità
fdgfdg ---> 5
fdgdg ---> 4
vzzdfd ---> 2
ddfsdfsf ---> 1
gdgdfd ---> 3

Vorrei ottenere il tutto ordinato progressivamente
ddfsdfsf 1
vzzdfd 2
gdgdfd 3
fdgdg 4
fdgfdg 5

E' possibile farlo direttamente con la SELECT e poi con ORDER?
 
Ciao innanzitutto grazie per la cortese risposta.
L'esempio è puramente indicativo.
Ho la colonna nomi che dopo la SELECT DISTINCT mi dà come risultato
Pippo
Luigi
Mario
Franco

Io devo assegnare un'ordine,che non è ne matematico ne logico,ne alfabetico.
Con la select posso ordinarli in ordine alfabetico,io però dovrei aggiungere una colonna a questi nomi con un numero progressivo.Vorrei farlo sulla tabella però andrei a scrivere lo stesso numero ripetuto tantissime volte e mi sembra poco corretto.Sbaglio? esiste un'altro metodo?
in questo esempio parla prorpio di quello di cui ho bisogno
https://informatizzati.org/informatica-generale/lista-di-record-da-query-con-numero-progressivo.html
però non sò come adattarlo al mio caso
 
Io devo assegnare un'ordine,che non è ne matematico ne logico,ne alfabetico.
un computer applica sempre delle regole che sono modellate nel software
Vorrei farlo sulla tabella però andrei a scrivere lo stesso numero ripetuto tantissime volte e mi sembra poco corretto
mi sembra di capire che non sei in grado di definire come assegnare questa priorità neppure in modo "manuale"

se non è possibile definire una regola, mi sembra non si possa addivenire a nessuna soluzione,
prova a spiegare meglio che dati stai trattando (magari con un esempio concreto) e qual'è lo scopo per cui lo fai

fdgfdg ---> 5
fdgdg ---> 4
vzzdfd ---> 2
ddfsdfsf ---> 1
gdgdfd ---> 3

con che criterio associ la sequenza numerica agli elementi selezionati ?

forse che la regola è data dalla sequenza di inserimento nel db e quindi l' "id" (autoincrement) di fatto rappresenta la sequenza stessa ?
 
Ultima modifica:
  • Like
Reactions: solari77
Ciao effettivamente ho fatto un po' di confusione.
Io ho una tabella con dei nomi ed altri dati.
Devo visualizzarli a video con una priorità decisa arbitrariamente da me(capisco che è strano ).
A questo punto però credo che inseriro' nella tabella un campo "priorità" .Parlo di una select distinct che mi restituisce circa 30 nominativi(in totale saranno 400),quindi non credo di appesantire troppo il DB,almeno spero.
Però data la particolaristici della mia richiesta non credo ci sia altro da fare.
Grazie comunque
 
A questo punto però credo che inseriro' nella tabella un campo "priorità"
capita di avere situazioni dove l'utente deve inserire una priorità/sequenza perché non è ricavabile da nessuna delle informazioni presenti, quindi ...
Cattura.PNG
 
Ciao e grazie ancora per le cortesi risposte.
Non capisco quello che mi hai indicato...il "sequenza di stampa".
Dove lo trovo?Cos'è esattamente?
Grazie
 
non è nulla di particolare, solo sottolineare che non essendoci regole, rimane solo l'attribuzione manuale (sequenza/priorità/posizione) ed ho ripreso un frammento di un'applicazione reale
 
  • Like
Reactions: solari77
ciao
per divertimento ho provato, considerando di avere una tabella del tipo:
Codice:
id int(6) autoincrement primarykey
nome varchar (50)
posizione int(6) default 0
]al primo inserimento di un utente
PHP:
//connessione
$nome=$_POST['nome'];
$query=mysqli_query($conn,"SELECT max(posizione) as ultimo FROM tabella");//leggo la posizione massima registrata
$r=mysqli_fetch_assoc($query);
$pos=(int)($r['ultimo']+1);
$query=mysqli_query($conn,"INSERT tabella(nome,posizione) VALUES('$nome',$pos)");
//l'ultimo utente inserito viene inserito come ultima posizione
poi per cambiare posizione ad un utente
form per cambio:
PHP:
//connessione
$query=mysqli_query($conn,"SELECT max(posizione) as ultimo FROM tabella");//oppure da precedente
$r=mysqli_fetch_assoc($query);
$pos=(int)($r['ultimo']);
$query=mysqli_query($conn,"SELECT * FROM tabella ORDER BY nome");// o order by posizione, nome
echo "<form....>";
while($riga=mysqli_fetch_assoc($query)){
    $id=$riga['id'];
    $nome=$riga['nome'];
    $posto=$riga['posizione'];
    //un po di js per inviare al insert della nuova posizione
    //in modo da esegure un cambio alla volta (secondo me si evitano errori)
    echo "<input name=\"id\" type=\"hidden\" value=\"$id\">";
    echo "spostare $nome da $posto a: <input type=\"number\" name=\"pos\" min=\"1\" max=\"$pos\">";
}
echo "</form>";
script per cambio posizione
PHP:
//connessione
$id=$_POST['id'];
$nuova_pos=$_POST['pos'];
//uppo la nuova posizione per l'utente
$query=mysqli_query($conn,"UPDATE tabella SET posizione=$nuova_pos WHERE id=$id");
//riaggiusto le varie posizioni scalando gli utenti con posizione maggiore dell'inputata
$query=mysqli_query($conn,"UPDATE tabella SET posizione=posizione+1 WHERE posizione>=$nuova_pos AND id !=$id");
dato la possibilità di eliminare un utente potrebbe succedere che si formi un buco tra una posizione e la successiva, quindi riordino ogni tanto o quando elimino l'utente, la tabella
PHP:
//connessione
//ho eliminato un utente e quindi riordino
$query=mysqli_query($conn,"SELECT id FROM tabella ORDER BY posizione ASC");
$p=1;
while($riga=mysqli_fetch_assoc($query)){
    $id=$riga['id'];
    $riordina=$qu($conn,"UPDATE tabella SET posizione=$p WHERE id=$id");
    $p++;
}
potrebbe andare per ordinamento arbitrario e soggettivo?
 

Discussioni simili