Newsgroup: it.comp.www.php
Titolo: presentazione + primo problema [cercare corrispondenze successive in un db]

Intanto mi presento, sono nuovo nel ng ed a quanto pare ci invecchierò
^_^... ho ancora moltissimo da imparare e quel poco che so o che ho scoperto
in questi brevi mesi di pratica spero di poterlo "sharare" con voi proprio
qui!
bando alle ciance... ecco il mio primo problema (ne seguiranno altri
80407475734574397695496~)
sto creando un portale per una galleria d'arte; l'utente dopo aver
selezionato da un elenco l'artista interessato arriva nella pagina del
suddetto.
nella pagina dedicata all'artista ci sono dei thumbnails relativi alle sue
opere, cliccando sopra di un thumb si apre una pagina con l'immagine grande.
vorrei creare la possibilità all'utente di poter navigare tra le immagini
grandi mettendo dei tasti "indietro" ed "avanti".
 problemi:
non riesco a dire al php di andare all'id SUCCESSIVO DISPONIBILE
dell'immagine del quadro di quel dato autore, riesco solo a dire di andare
all'id successivo in ordine numerico (se si visualizza la foto con id 1,
riesco a dirgli di andare alle foto con id 2 e via seguendo...)... il fatto
è che le opere sono state inserite a casaccio e non tutte le opere di un
autore sono in fila (anzi) magari una ha come id 2 e la successiva id 45...
come faccio a dire alla query che mi deve calcolare SOLAMENTE le opere di
quell'autore passando alla successiva e saltando quelle che non sono di
quell'autore?
io fin qui sono riuscito...
$query = "SELECT * FROM $TableName WHERE cognome='$cognome' AND
id='$id'+1";
il pulsante poi richiamerà il comando in questo modo:
<a href=showpic.php?id=$row[id]>

id='$id'+1";
Altro metodo: dentro a showpic, invece della query sopra, puoi fare:
SELECT
	MIN(CASE WHEN id > $id THEN id ELSE NULL END) AS succ,
	MAX(CASE WHEN id < $id THEN id ELSE NULL END) AS prec
FROM $TableName WHERE cognome='$cognome';
Qui $row[succ] e' l'id successivo (il piu' piccolo id superiore all'id
corrente, $row[prec] e' quello precedente... se uno dei due non esiste
dovrebbe ritornarti NULL (credo che PHP lo veda come 0).
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio

 ha scritto nel messaggio
news:cui6m05tvfn7gq26b...@L.Serni...


>                                                 - Conphpucio
-- 
www.iuz-lab.info

grazie per il tuo intervento... ma non funziona... mi dice errore in riga
bla bla bla...
io ho inserito il tuo codice nel vecchio in questo modo:
$query = "SELECT MIN(CASE WHEN id > $id THEN id ELSE NULL END) AS succ,
MAX(CASE WHEN id < $id THEN id ELSE NULL END) AS prec FROM $TableName WHERE
cognome='$cognome'; ";
$result = mysql_query ($query, $Link) or die("Immagini per questo autore
terminate, torna alla pagina precedente");
list($prec, $succ) = @mysql_fetch_array($result);
if($prec) echo "<a href=showquadro.php?id=$prec&cognome=$cognome> <font
color=white> INDIETRO </font></a>";
-
if($succ) echo "<a href=showquadro.php?id=$succ&cognome=$cognome> <font
color=white> AVANTI </font></a>";
?>
in pratica ho levato print e while visto che hai messo list e echo...
"iuz" <us...@host.network> ha scritto nel messaggio
news:gxL8d.69210$35.35...@news4.tin.it...


 
-- 
www.iuz-lab.info

Parse error: parse error, unexpected T_IF in
D:\Inetpub\webs\cybergothicit\zodiac\showquadro.php on line 50


"in fondo"... che dà errore nella query.
Non da' errore, ritorna NULL. Tu riconosci la situazione (if $row[...] ==
'' oppure, meglio,
	if (0 != (int)$row['succ'])
		echo "<a href=showquadro.php?id=$succ&cognome=$cognome>
<font color="white"> AVANTI </font></a>";
===
Io ho fatto le prove con una tabella micragnosa:
mysql> select * from zot;
+------+
| id   |
+------+
|    1 |
|    2 |
|    4 |
|    5 |
+------+
4 rows in set (0.00 sec)
mysql> select min(case when id > 5 then id else null end) as succ,
max(case when id < 5 then id else null end) as prec from zot;
+------+------+
| succ | prec |
+------+------+
| NULL |    4 |
+------+------+
1 row in set (0.00 sec)
mysql> select min(case when id > 4 then id else null end) as succ,
max(case when id < 4 then id else null end) as prec from zot;
+------+------+
| succ | prec |
+------+------+
|    5 |    2 |
+------+------+
1 row in set (0.00 sec)
mysql> select min(case when id > 1 then id else null end) as succ,
max(case when id < 1 then id else null end) as prec from zot;
+------+------+
| succ | prec |
+------+------+
|    2 | NULL |
+------+------+
1 row in set (0.00 sec)
mysql> delete from zot;
Query OK, 4 rows affected (0.00 sec)
mysql> select min(case when id > 1 then id else null end) as succ,
max(case when id < 1 then id else null end) as prec from zot;
+------+------+
| succ | prec |
+------+------+
| NULL | NULL |
+------+------+
1 row in set (0.00 sec)
...e mi pare funzioni sempre benissimo, errori non ne da' mai. Male male
non ti compare niente se gli passi un cognome inesistente.
Puoi modificare la query per ottenere tutti i dati:
mysql> select min(case when id > 1 then id else null end) as succ,
max(case when id < 1 then id else null end) as prec, min(case when id = 1
then 1 else null end) as curr from zot;
+------+------+------+
| succ | prec | curr |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+
1 row in set (0.00 sec)
In questo caso, se curr e' NULL vuol dire che la query non ha trovato
niente, ma il PHP e MySQL eseguono senza errori; sicche' puoi trovare
la condizione di errore senza problemi.
	if (0 != (int)$row['prev'])
		echo "<a
href=showquadro.php?id=$row[prev]&cognome=$cognome> <font color="white">
INDIETRO </font></a>";
	if (0 == (int)$row['curr'])
		echo "Eh. Casino da raccont&agrave;";
	else
	{
		// Mostra immagine, thumbnail, ecc.
	}
	if (0 != (int)$row['succ'])
		echo "<a
href=showquadro.php?id=$row[succ]&cognome=$cognome> <font color="white">
AVANTI </font></a>";



 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/