Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di liquido
    Registrato dal
    Mar 2004
    Messaggi
    164

    up\down posizione campo

    Ciao a tutti,
    sto inserendo in un'amministrazione la possibilità di spostare gli elementi presenti, in modo da stabilirne la posizione..

    Non ho problemi per il codice, ma vorrei chiedervi un parere riguardante la struttura (magari riuscite a darmi un'idea per renderla meno macchinosa)

    Nel db ho l'id (che si auto incrementa), il campo ordina e il campo data (che rappresenta la data e ora di inserimento)..

    Ogni qual volta seleziono una voce e clicco su "Up", lo script, facendo riferimento all'id, da un +1 ad ordina, viceversa se clicco su "Down" da un -1..

    In caso due o più campi di ordina siano uguali, per la gestione delle posizioni viene fatto riferimento anche alla data di inserimento..


    Pensate che la cosa possa esser resa più semplice (a livello di codice) ? Io purtroppo è la prima volta che realizzo una cosa simile, di conseguenza sarebbe bello sentire il parere di qualche altro


    Grazie anticipatamente
    "Html.it, messaggio gratuito. Siamo spiacenti ma il forum da Lei richiesto è chiuso o momentaneamente irraggiungibile. Si prega di riprovare più tardi. Grazie."

    Argh.. maledetta banda!

  2. #2
    Utente di HTML.it L'avatar di liquido
    Registrato dal
    Mar 2004
    Messaggi
    164
    (UP) Ho trovato un inconveniente nel mio script (e quando mai )..

    Usare le date come secondo metodo di ordine, non è una buona idea, perchè in caso ci siano due numeri con "ordine" uguale ad "1" (che rappresenta il numero più piccolo), verrà sempre preferenziato quello con data minore (ovviamente) e di conseguenza non sarà mai un ordine perfetto..

    Sono due notti che cerco di trovare la soluzione, l'unica idea che mi è venuta è quella di scambiare il contenuto dei campi a seconda dello spostamento effettuato.. Ma mi sembra una soluzione drastica..

    Qualche idea ?

    "Html.it, messaggio gratuito. Siamo spiacenti ma il forum da Lei richiesto è chiuso o momentaneamente irraggiungibile. Si prega di riprovare più tardi. Grazie."

    Argh.. maledetta banda!

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    order by id ASC, data DESC

    non ti va bene?


  4. #4
    mhh e fare semplicemente in modo che nel campo ordina non ci siano valori uguali ?

  5. #5
    Utente di HTML.it L'avatar di liquido
    Registrato dal
    Mar 2004
    Messaggi
    164
    Originariamente inviato da pierotto
    order by id ASC, data DESC

    non ti va bene?

    Grazie per aver risposto,
    Comunque ordinandoli come hai indicato tu avrò ugualmente lo stesso problema. Ti spiego, io ho due pulsantini "su" e "giù", cliccandoli si aziona il meccanismo che incrementa o decrementa il numero di ordine equivalente al campo selezionato. L'unico problema è che vi sono dei limiti,ad es., il limite di "su" è rappresentato dal numero più piccolo presente in "ordine" (nel mio caso "1").

    Di conseguenza se faccio salire un campo con ordine "2", diventerà di ordine "1", a questo punto non posso più farlo salire, perchè ha raggiunto il limite e mi troverò due campi con ordine "1" nella tabella. Che io faccia riferimento alla data in DESC o ASC, comunque limito uno dei due campi che non potrà mai salire sopra l'altro..
    "Html.it, messaggio gratuito. Siamo spiacenti ma il forum da Lei richiesto è chiuso o momentaneamente irraggiungibile. Si prega di riprovare più tardi. Grazie."

    Argh.. maledetta banda!

  6. #6
    Utente di HTML.it L'avatar di liquido
    Registrato dal
    Mar 2004
    Messaggi
    164
    Originariamente inviato da Eyescream
    mhh e fare semplicemente in modo che nel campo ordina non ci siano valori uguali ?
    Ci avevo pensato ma..
    Come dicevo ci sono dei limiti, quindi se il limite minimo è 1 e quello massimo è il numero più grande, per non far coesistere valori uguali dovrei invertire i campi ordina..

    Ma seppur sembra una stupidagine, non ci sono riuscito..

    Perchè io prendo come punto di riferimento l'id,quindi si dovrebbe fare questo ragionamento (contando che id e ordine hanno valori medesimi):

    codice:
    UPDATE table SET ordine=ordine-1 WHERE id='$id'
    e poi il cambio

    codice:
    $idpiu = $id+1
    UPDATE table SET ordine=ordine+1 WHERE id='$idpiu'
    Ma questo discorso vale solo la prima volta perchè se dovessi selezionare la medesima voce, il valore ordine varierebbe..
    "Html.it, messaggio gratuito. Siamo spiacenti ma il forum da Lei richiesto è chiuso o momentaneamente irraggiungibile. Si prega di riprovare più tardi. Grazie."

    Argh.. maledetta banda!

  7. #7
    pensavo ad una cosa del genere:
    cliccando su un pulsante arrivano alla pagina php queste info:
    1-$vecchio_id da spostare
    2-$vecchio_ordine attuale
    3-se bisogna spostarlo su o giu

    diciamo che vuole essere spostato in alto
    poi fai una query
    "select * from tab where ordine<{$vecchio_ordine} limit 0,1";
    (questo per gestire anche la possibilità che vengano cancellati dei records quindi "ordine" non sarebbe piu completo, col +1/-1 potrebbe incasinarsi)

    con mysql_num_rows vedi se esiste (se non esiste è gia quella piu in alto) e ricavi $nuovoid $nuovo_ordine
    poi fai l'update $nuovo_id -> $vecchio_ordine e $vecchio_id -> $nuovo_ordine

  8. #8
    Utente di HTML.it L'avatar di liquido
    Registrato dal
    Mar 2004
    Messaggi
    164
    Originariamente inviato da Eyescream
    pensavo ad una cosa del genere:
    Grazie mille, la tua idea mi piace, ma avrei dei chiarimenti da chiederti (purtroppo sono un pò duro a capire le cose )

    cliccando su un pulsante arrivano alla pagina php queste info:
    1-$vecchio_id da spostare
    2-"$vecchio_ordine" attuale
    3-se bisogna spostarlo su o giu
    $vecchio_id e $vecchio_ordine sarebbero quelli dell'elemento selezionato, giusto ? Quindi, ipotiziamo che io seleziono un ampo che ha come id 5 e come ordine 3, diventerebbero rispettivamente vecchio_id e vecchio_ordine, giusto ?

    diciamo che vuole essere spostato in alto
    poi fai una query
    "select * from tab where ordine<{$ordine} limit 0,1";
    (questo per gestire anche la possibilità che vengano cancellati dei records quindi "ordine" non sarebbe piu completo, col +1/-1 potrebbe incasinarsi)
    $ordine è sempre equivalente a $vecchio_ordine e di conseguenza all'ordine dell'elemento selezionato ?

    con mysql_num_rows vedi se esiste (se non esiste è gia quella piu in alto) e ricavi $nuovoid $nuovo_ordine
    poi fai l'update $nuovo_id -> $vecchio_ordine e $vecchio_id -> $nuovo_ordine
    Scusa la domanda stupida, ma $nuovoid e $nuovo_ordine li ottengo dalla query precedente, giusto ?


    Grazie ancora, se tutto funziona, mi hai impedito di passare un'altra notte insonne..
    "Html.it, messaggio gratuito. Siamo spiacenti ma il forum da Lei richiesto è chiuso o momentaneamente irraggiungibile. Si prega di riprovare più tardi. Grazie."

    Argh.. maledetta banda!

  9. #9
    $vecchio_id e $vecchio_ordine sarebbero quelli dell'elemento selezionato, giusto ? Quindi, ipotiziamo che io seleziono un ampo che ha come id 5 e come ordine 3, diventerebbero rispettivamente vecchio_id e vecchio_ordine, giusto ?
    esatto
    $ordine è sempre equivalente a $vecchio_ordine e di conseguenza all'ordine dell'elemento selezionato ?
    si, errore mio
    Scusa la domanda stupida, ma $nuovoid e $nuovo_ordine li ottengo dalla query precedente, giusto ?
    yessir

  10. #10
    Utente di HTML.it L'avatar di liquido
    Registrato dal
    Mar 2004
    Messaggi
    164
    Grazie mille, appena finisco ti faccio sapere com'è andata, e se vuoi ti dò lo script finito, magari te lo riutilizzi in futuro


    Ciao e grazie ancora
    "Html.it, messaggio gratuito. Siamo spiacenti ma il forum da Lei richiesto è chiuso o momentaneamente irraggiungibile. Si prega di riprovare più tardi. Grazie."

    Argh.. maledetta banda!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.