Newsgroup: it.comp.www.php
Titolo: [MySql] selezionare antecedente e conseguente di un record

Sto costruendo una gallery prendendo i dati da un database MySql.
Non so come generare i link di navigazione << e >>.
Questi infatti dipendono dalla posizione del record visualizzato
all'interno della tabella.
Nell'Url della foto passo come dato l'ID a cui appartiene la foto e la
categoria (nome della tabella).
$di identifica la tabella sulla quale ci sono i dati
$id identifica il record del dato interessato.
Questa è la query per il record.
"Select id, titolo, gruppo, immagine From ${di} Where id=${id}"
Eseguo una nuova query per selezionare tutti i record che appartengono a
quel gruppo
"Select id, titolo, immagine From ${di} Where gruppo=${gruppo} Order By
ASC"
Ora come faccio ad individuare nel risultato i tre record che mi
interessano?
Precedente
Attuale
Successivo
Arjuna
-- 
Gnotis se auton.
 22/03/2004 13.02.57

 all'interno della tabella.
Ammettendo che IDImmagine sia la chiave primaria autoinc puo effettuare
queste tre query:
SELECT * FROM table WHERE IDImmagine = $IDImmagine 
SELECT * FROM table WHERE IDImmagine > $IDImmagine ORDER BY IDImmagine
LIMIT 0,1
SELECT * FROM table WHERE IDImmagine > $IDImmagine ORDER BY IDImmagine
DESC LIMIT 0,1
In alternativa puoi ordinare per un altro campo che definisce l'ordine
in cui le immagini vengono visualizzate nella tabella.
-- 
I am what I am, I do what I can
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

 queste tre query:
L'ID č la chiave primaria autoinc ma il punto č che gli inserimenti non
sono in ordine alfabetico. Quindi non c'č parallelismo tra id e ordine
alfabetico dei titoli...
Andrebbe bene ma avrei una successione non ordinata.
-- 
Gnotis se auton.
 22/03/2004 16.12.16

 interessano?
non riesco a capire se la tabella è una sola o sono due...
in entrambi i casi perché non passare anche il gruppo oltre che l'id?
una soluzione possibile:
avendo il gruppo="GRP"
fai una query che individua le foto che intendi visualizzare
SELECT * FROM tblIMMAGINI WHERE tblIMMAGINI.Gruppo="GRP"
a questo punto scorri il resultset della query, individui la riga che 
corrisponde all'ID che ti interessa (k) e utilizzi la funzione 
mysql_data_seek per individuare l'ID del precedente e del successore che 
sono esattamente quelli alla riga k-1 e k+1.
Comunque credo che la soluzione migliore per una cosa del genere sia 
utilizzare una soluzione mista php-js per costruire il sistema di 
navigazione: nella prima pagina della galleria crei dinamicamente lo 
script js con la corretta sequenza di id delle immagini e potresti 
associare due funzioncine js next e prev per far caricare la nuova 
immagine... Questa soluzione diventa più elaborata nel momento in cui 
devi caricare info dal db assieme all'immagine e sarebbe conveniente in 
questo caso utilizzare qualche opportuno container html (frame - iframe 
etc).
Ciao Gianfranzo
-- 
ICQ#: 21258924 Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra
"dopo tutto, gli angeli non sono altro che dei volatili" D. Pennac

Ti faccio vedere attualmente com'è la gallery:
http://gabriella.amodioceramiche.com//pagina.php?name=esposizioni&esposizione=10&di=quadri
quando clicchi su un quadro vengono passati alla pagina che si apre sia
l'id del qudro sia la tabella di appartenenza.
Adesso la pagina che si apre deve caricare i dati del quadro per
visualizzarlo correttamente. Non voglio fare un link chilometrico e passare
tutti i valori tramite GET (sbaglio a pensare che il mio metodo è più
veloce?).
A quel punto faccio la query.
Il tuo suggerimento non credo funzioni per lo stesso motivo dell'altra
risposta.
Gli Id non sono ordinati. L'ordine è in base al titolo e quindi aggiungere
e sottrarre l'unità all'id de quadro non significa selezionare quello che
viene prima e quello che viene dopo in ordine alfabetico.
Non ho capito tanto cosa dici circa il JS ma non voglio usare ne Frame ne
iFrame.
Arjuna
-- 
Homo sum, humani nihil a me alienum puto.
 22/03/2004 18.29.01

 viene prima e quello che viene dopo in ordine alfabetico.
non ho scritto questo, ho detto che il precedente e il successivo 
dell'elemento alla riga k si trovano alla riga k-1 e k+1
Non ho fatto alcuna ipotesi sugli ID, né è possibile farla, il metodo 
che ho descritto è dipendente dal solo ordinamento dei record della query.
mysql_data_seek causa solo lo spostamento del cursore all'interno del 
resultset.


Non conoscevo mysql_data_seek e per questo mi sono confuso.
Credevo che come tutti mi stessi suggerendo di variare l'id.
Mi sembra di capire che quanto suggerisci è esattamente quello che cercavo.
Ho studiato un pò quanto hai detto e la funzione mysql_data_seek dal
manuale ma non riesco a capire una cosa.
bool mysql_data_seek ( resource identificativo_risultato, int numero_riga)
Restituisce vero o falso.
L'identificativo del risultato è la query al database, quindi conterrà
tutte le righe che appartengono al gruppo scelto.
Il Numero di riga dovrebbe identificare la posizione del mio record
all'interno della query, ma io come faccio a sapere qual'è questa
posizione?
Come posso utilizzare il risultato di mysql_data_seek essendo questo un
boleano? 
Non si sprecano tante risorse a scorrere tutta la query alla ricerca delle
tre righe che mi servono? Deduco che questo si deve fare tramite un ciclo e
che quindi per tre volte questo dovrà scorrere tutta la query in cerca del
risultato...
Grazie ancora per le risposte e scusa la mia cecità
Arjuna
-- 
Homo sum, humani nihil a me alienum puto.
 23/03/2004 13.38.40

 risultato...
no una sola volta... trovato che il record interessato è alla riga $k, 
usi mysql_data_seek($connessione, $k-1) e ti sposti alla riga 
precedente, fai il tuo fetch della riga , poi usi 
mysql_data_seek($connessione, $k+1) e fetch di questa riga...
occhio che data_seek sposta solo il puntatore alla riga corrente, non fa 
altro.


 frattempo conti quante righe hai letto...
cosa significa fai un normale ciclo?
Devo verificare ogni valore?
for ($i = 0 ; $i <= mysql_num_rows($risultato) ; $i++) {
 
	Cosa devo inserire qui? Come individuo il mio record?
} 
Grazie
Arjuna
-- 
Homo sum, humani nihil a me alienum puto.
 24/03/2004 1.13.20

 } 
intanto dovresti utilizzare un while, poi banalmente la riga che cerchi 
è quella in cui il campo id è quello che hai passato...
Non scriverò la parte di codice che manca, perchè non ho tempo, ti 
consiglio di comperare un buon manuale di php e studiare 
l'interfacciamento con i db, è essenziale conoscere le operazioni 
elementari prima di avventurarsi in complicazioni non sempre banali...
se programmi pagine dinamiche per divertimento il tempo lo hai, se lo 
fai per mestiere è necessario che lo trovi.
