Come riordinare le righe di una tabella

Salve a tutti

ho un problema: attraverso un pannello di amministrazione da me programmato, ho l'esigenza di dare la possibilità di riordinare le righe di una tabella MySql.

Adesso le righe vengono ordinate in maniera ascendente in base ad un campo dove assegno la data odierna in formato getdate().

Come posso programmare in php l'operazione di "riga in alto" o "riga in basso" rispetto a questo campo?

E' corretto ordinare le righe in base a questo campo o devo cambiare metodo?

Grazie e tutti quelli che mi aiuteranno...   :) ;)

inviato 9 anni fa
Assolollo
X 0 X

Non so se sono solo io a non averci capito molto, cmq potresti postare anche un po' di codice, così si capisce meglio...

Forse tu intendi dare la possibilità al'utente di ordinare per data crescente o decrescente?

o non ci ho capito nulla io?

ciao

Lore

risposto 9 anni fa
Lore
Lore
1
X 0 X

Premesso che concordo con Lore, è corretto ordinare le righe in base a quello che serve: ti serve ordinarle per data? Allora ok, è corretto che le ordini in base a quel campo, se invece le devi ordinare alfabeticamente non è coretto usare quel campo; semplice no?

L'ordinamento di visualizzazione delle righe del db lo puoi fare solamente effettuando di nuovo la query al db; nel tuo caso devi usare la stessa query cambiando semplicemente .... order by campo_data ASC o .... order by campo_data DESC.

risposto 9 anni fa
LonelyWolf
X 0 X

Avete ragione... non sono stato molto chiaro..   :-\

Prima di tutto l'operazione di riordino tabella deve essere fatta per forza da un Pannello di Amministrazione (insomma dagli utenti che useranno il Pannello) e quindi dovrei programmare una funzione in grado di fare questo.

Dallo stesso Pannello, ovviamente, ho programmato anche l'aggiunta, la modifica e la cancellazione di qualsiasi riga all'interno della stessa tabella (alla stregua di uno script che gestisce le news sul sito).

La tabella è composta dal campo id, event e titolo. Ho pensato di far visualizzare nel Pannello l'elenco delle righe ordinate in senso ascendente in base al campo event. Quest'ultimo viene memorizzato nel database con il valore della variabile $event ricavato dalla espressione:

$event = getdate();

$event = $event[0]

Oltre all'aggiunta, modifica e cancellazione di qualsiasi riga della tabella, ho la necessità di far modificare dall'utente anche l'ordine di visualizzaione. Dovrei cioè programmare un tasto che sposti la riga in alto (attenzione: non intendo al top di tutte) ed uno che la sposti in basso. Come posso fare tale operazione? Premetto che il campo event è stata una mia idea e posso tranquillamente cambiare metodo.

Spero adesso di essere stato più chiaro....  O0

risposto 9 anni fa
Assolollo
X 0 X

Adesso sei stato + chiaro!

Per fare quello che dici la data non va bene, devi avere un indice numerico che modifichi in base all'ordine che deve avere in visualizzazione; le date si ordinano per data e 31/12/2006 sarà sempre dopo al 30/12/2006 a meno che non gli cambi la data, ma se stai usando una data non credo sia utile cambiarla: un evento del 31 non può avere data 29 solo per visualizzarlo prima.

Quindi se gli metti un numero per anticiparlo di un posto basta diminuirlo di 1 (spostando il precedente incrementandolo, se non ci possonbo essere 2 titoli nello stesso punto)

Oddio, mi sa che non sono stato molto chiaro io questa volta! ;P

risposto 9 anni fa
LonelyWolf
modificato 9 anni fa
X 0 X

La scelta di inserire il valore di getdate() è stata fatta soltanto per memorizzare un numero intero nel campo event (in realtà le righe non devono essere ordinate in base a nessuna data!), per gestire gli spostamenti, poi, ho provato con il seguente codice che controlla solo lo spostamento in alto (e in verità potrebbe bastare):

$sql="SELECT * FROM nome_tabella ORDER BY event ASC";
      $query=mysql_query($sql);
      $data=0;
         while($event = mysql_fetch_array($query)){

            if(( $data <= $event['event']) && ($event['event'] < $id_event['event'])) {
            $data = $event['event']; }
         }
      $data = $data--;
      $sql="UPDATE $nome_tabella SET event='$data' WHERE id='".$_REQUEST['id']."'";
      mysql_query($sql);

dove $id_event['event'] è il valore del campo event della riga da spostare e $_REQUEST['id'] è il relativo id (calcolati con un'altra funzione).

In pratica il codice legge il valore di event appena più alto rispetto alla riga da spostare, dopodichè sottrae 1 alla stessa...   ::)

Ma purtroppo questo codice non funziona correttamente :( .

Cioè funziona solo per pochi spostamenti. Se insisto fra due righe vicine, mi cambia il campo nello stesso valore....

risposto 9 anni fa
Assolollo
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda