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 VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003

    [sql] record successivo non sequenziale

    Scusate il titolo cazzuto ma non ho trovato di meglio.

    Nell'intranet che sto facendo (ogni 5 minuti viene chiesto di aggiungere, togliere, modificare qualcosa ) ho una lista di prodotti la cui query per la visualizzazione è questa:
    Codice PHP:
    $sql_query "SELECT * FROM aziende RIGHT JOIN ddt ON ddt.azienda=aziende.id ORDER BY aziende.nome, ddt.categoria, ddt.descrizione"
    Ora, dato l'id si clicca su un link e si accede alla scheda tecnica del prodotto relativo. Mi è stato chiesto, in tale scheda, di mettere dei bottoni che rimandino al prodotto successivo e quello precedente così come sono elencati nella lista generale.
    In questo caso... come organizzo la query? Come faccio a fargli sapere che deve essere il record successivo dato che non c'è ordinamento per id (nè può esserci)?

  2. #2
    fai così se ho ben capito
    quando apri la scheda ti porti deitro il valore minimo e massimo dell'id ... così alla next page aggiungi uno all'id che hai ... fai una query e se esiste a prima botta ok altrimenti lo fai avanzare fino a quando non arriva al primo id che trova nei limiti dell'id massimo che sai di avere ... lo stesso per il minimo al contrario sottraendo ... se ho capito bene

  3. #3
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Il problema è che può capitare (anzi capita) che nella lista generale la sequenza (di id) sia in questo modo

    55, 69, 77, 78, 79, 80, 13, 56, 34 e così via.
    Come posso far sì che arrivato a 80 non mi passi ad un record successivo che abbia id>80 (perchè non deve fare così)?

  4. #4

  5. #5
    Utente di HTML.it L'avatar di erme2
    Registrato dal
    Oct 2002
    Messaggi
    177

    Re: [sql] record successivo non sequenziale

    Originariamente inviato da VaLvOnAuTa
    Mi è stato chiesto, in tale scheda, di mettere dei bottoni che rimandino al prodotto successivo e quello precedente così come sono elencati nella lista generale.
    In questo caso... come organizzo la query? Come faccio a fargli sapere che deve essere il record successivo dato che non c'è ordinamento per id (nè può esserci)?
    ma come sono ordinati nella lista generale? in ordine alfabetico di immissione oppure cosa?
    eRMéS! RM98!
    "...è mai possibile oh porco di un cane, che le avventure in codesto reame, debban risolversi tutte con grandi puttane!..." - (Carlo Martello ritorna dalla battaglia di Poitiers -Fabrizio De Andrè/Paolo Villaggio)

  6. #6
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Nella "lista generale" sono ordinati prima per nome azienda, poi per categoria ed infine per descrizione del prodotto. Ne risulta che non ci sono parametri numerici consecutivi cui affidarsi per ottenere la sequenza, potrei aggiungere ORDER BY id ma il problema non verrebbe risolto ma semplicemente spostato quando c'è il salto di categoria (che comunque deve essere precedente all'ordinamento per id).

    Un esempio:

    codice:
    id |descrizione         | azienda
    80 |Router Cisco        |pinco pallino
    15 |Router Cisco        |pinco pallino
    8  |Access Point Cisco  |pinco pallino2
    Se arrivo alla scheda con id 15 devo far sì che cliccando su successivo vada su 8 mentre se clicco su precedente vada su 80. L'ordinamento per il non sarebbe una soluzione

  7. #7
    Utente di HTML.it L'avatar di erme2
    Registrato dal
    Oct 2002
    Messaggi
    177
    potresti fare:
    SELECT id FROM tabella ORDER BY azienda, categoria, descrizione;

    i numeri letti diventano un array su cui puoi andare avanti ed indietro...
    eRMéS! RM98!
    "...è mai possibile oh porco di un cane, che le avventure in codesto reame, debban risolversi tutte con grandi puttane!..." - (Carlo Martello ritorna dalla battaglia di Poitiers -Fabrizio De Andrè/Paolo Villaggio)

  8. #8
    select id from tab where id > $id_corrente order by id limit 0,1
    per pulsante avanti
    select id from tab where id < $id_corrente order by id limit 0,1
    per pulsante indietro

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Originariamente inviato da Eyescream
    select id from tab where id > $id_corrente order by id limit 0,1
    per pulsante avanti
    select id from tab where id < $id_corrente order by id limit 0,1
    per pulsante indietro
    Mi era parso di capire che gli ID non sono ordinati, possono essere sia minori che maggiori, sia prima che dopo.

    Penso che un modo sia quello di fare due query identiche, stesso order by stesso posizionamento ordinale degli ID, la prima query solo per memorizzare la sequenza degli ID in un array con indice numerico. poi con la seconda query associare al record estratto l'id previus e l'id next prelevato dall'array degli id. In questo modo ogni link trasporta sia il corrente id che l'id previus ed l'id next. Basta utilizzare due contatori che puntino all'indice numerico dell'array con gli ID.

    Ripeto "una" delle soluzioni possibili.


  10. #10
    ah si avevo letto male il post, pensavo non fossero ordinati nel senso che alcuni mancavano
    my fault

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.