Newsgroup: it.comp.www.php
Titolo: Conoscere posizione di un record

salve a tutti,
vorrei sapere se è possibile conoscere la posizione di un record
all'interno di un dataset.
Ad esempio, se la query mi restituisce i seguenti risultati:
ID      NomeSito     UrlSito
2       sito1            
www.sito1.it
10     sito2            
www.sito2.it
25     sito3            
www.sito3.it
come è possibile sapere in quale posizione si trova il sito con id
10?
Praticamente specificando l'ID 2 vorrei ottenere posizione 1,
specificando ID 10 (posizione 2), specificando ID 25 (posizione 3)
grazie anticipatamente per le vostre risposte

Allora:
Ottieni il risultato tramite mysql_fetch_assoc()
function trovaposizione($risultati , $id)
{
       foreach($risultati as $k_ris => $v_ris)
       {
              if($v_ris["id] == $id)$posizione=$k_ris;
       }
       return $posizione;
}
l'utilizzo è semplicissimo:
$posizione=trovaposizione($risult,"25"); //restituisce 2 (conta da 0,
quindi 0-1-2,  ti basta aggiungere un +1).
Facile no?


si è facile, quella soluzione l'avevo pensata anch'io, ma l'ho
scartata perchè non mi piace l'idea
di dover scorrere tutti i risultati soprattutto se quest'ultimi sono
molti.
Vorrei aspere se esiste un'istruzione apposita php/mysql che mi
risolva questa mia esigenza.
Questa informazione mi serve perchè vorrei sapere in che posizione si
trova in classifica un sito internet

 all'interno di un dataset.
Se ti riferisci a un database, non puoi, perche` i dati non hanno una 
posizione e un ordine predefiniti. Vengono salvati nella tabella come 
risulta meglio al motore di DB.
Per fare quello che vuoi tu devi modificare la struttura del DB: 
aggiungere una colonna "punteggio" e ordinarla in modo decrescente quando 
fai la query, per esempio, oppure fare una tabella aggiuntiva, collegata a 
questa, con il punteggio, le visite, i voti o quant'altro ti serva per 
stilare le classifiche.
Bye.

 stilare le classifiche.
grazie per la risposta, ovviamente ho fatto questo.
Per la precisione mi serve sapere la posizione per specificare se
rispetto alla
settimana precedente il sito è salito o sceso di posizione.
Non mi viene in mente nessuna idea adeguata per risolvere questo. Ad
ogni inserimento di voto
dovrei aggiornare la posizione di classifica non solo del sito che ha
ricevuto il voto, ma di conseguenza di tutti gli altri.
hai qualceh idea in tal proposito?

 hai qualceh idea in tal proposito?
Dipende da cosa dipende la classifica. Se e` basata sul numero di click 
memorizzi quelli, divisi per settimana/giorno o comunque con un timestamp 
(dipende dalla granularita` che vuoi ora e in futuro). Se e` basato su 
voti di utenti, memorizzi i voti, ecc. ecc.
Bye.

 voti di utenti, memorizzi i voti, ecc. ecc.
Mi spiego meglio.
Attualmente il db prevede l'utilizzo di 4 tabelle:
sito_iscritto (id_iscritto, data_iscrizione,ecc..)
statistiche_giornaliere (id_iscritto, voto, ecc..)
statistiche_mensili (id_iscritto, tot_voto, posizione, ecc...)
statistiche_annuali (id_iscritto, tot_voto, posizione, ecc...)
Se volessi sapere solamente i voti totali ricevuti da un sito mi
basterebbe incrementare di 1 il campo voto, ma volendo
anche sapere se un sito rispetto alla settimana, mese  e anno è salito
o
sceso in classifica mi vedo costretto a creare le 2 tabelle
statistiche_mensili e statistiche_annuali
Poi mediante codice faccio questo:
- ad ogni voto ricevuto inserisco un record nella tabella
statistiche_giornaliere: quindi un voto = record.
  Ho deciso di utilizzare questo approccio perchè così potrei creare
delle statistiche molto dettagliate
  e conoscere l'andamento di un sito nelle diverse ore (ecc..)
- all'inizio di ogni mese, sommo i voti ricevuti dal sito (quelli
della tab statistiche_giornaliere)
  e il relativo risultato lo  aggiungo in statistiche_mensili. Infine
cancello tutti i
  record della tabella statistiche_giornaliere;
- all'inizio di ogni anno, sommo i voti ricevuti durante l'anno
(quelli della tab statistice_mensili) e il relativo risultato
  lo aggiungo in statistiche_annuali. Infine cancello tutti i record
della tabella statistiche_mensili.
Insomma, ho impostato il tutto in questo modo, e vorrei capire se un
sito rispetto alla
settimana/mese/anno precedente e salito o sceso in classifica.
Quando raggruppo i dati e li inserisco nelle tabelle per le
statistiche mensili e annuali
ciclo - da php -  tutti i risultati per scoprire la posizione in
classifica e la memorizzo nelle rispettive tabelle ('posizione').
Invece, come mi devo comportare in caso di settimane?
Devo utilizzare i dati della tabella 'statistiche_giornaliere'
raggruppare i voti in base all'id
del sito e poi...?

 specificando ID 10 (posizione 2), specificando ID 25 (posizione 3)
Se i record sono ordinati per ID:
$id è la variabile contente l'id del record analizzato:
SELECT COUNT(id) WHERE id < $id
Al valore ottenuto aggiungi 1 e trovi la posizione del tuo record.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Al valore ottenuto aggiungi 1 e trovi la posizione del tuo record.
grazie mille, potrebbe essere una prima soluzione ...non ci avevo
proprio pensato