Autore Topic: Consiglio su query sql per visualizzare ultimi record visti  (Letto 5462 volte)

Offline rodolforizzo76

  • *
  • Post: 180
  • Reputazione: 2
  • Aaron Nimzowitsch
    • Mostra profilo
    • painteronline.org
Ciao a tutti, vorrei chiedere un consiglio, per sapere come si fa ad ottenere, tramite una query sql, la visualizzazione degli ultimi record visti da un utente. Mi spiego meglio: vorrei inserire un'opzione nel mio sito (quello che ho in firma), per fare in modo di visualizzare, per esempio, gli ultimi quadri visti dagli utenti del sito.
Qualcuno sa indicarmi il modo migliore per ottenere questo?

Grazie a tutti. 


Sei un artista? Visita il mio sito http://www.painteronline.org

Offline elvis

  • *
  • Post: 136
  • Reputazione: 9
    • Mostra profilo
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #1 il: 15 Maggio 2013 ore 18:02 »
Magari c'è un modo più efficiente, ma così al volo ti direi di implementare, con una apposita tabella del tuo DB, una associazione uno-a-molti tra gli utenti e i quadri.
Poi basta fare una semplice SELECT user FROM nuovaTabella e ci sei.

Questo se vuoi salvarti in modo persistente la cronologia di ciò che un utente vede. Se invece ti basta salvarti solo quello che l'utente ha visto nella sessione http attuale, puoi usare un mantenimento della sessione lavorando solo sul web server e non sul DB, ma qui dipende dal tipo di conoscenze che hai.
« Ultima modifica: 15 Maggio 2013 ore 18:04 da elvis »
Pc Config
--phenom x4 965 @ 3.4 ghz
--corsair 8GB ddr3
--nvidia gtx 460
--ocz agility 3 60GB (chakra)
--crucial m4 128GB (windows 8.1)

Offline dinolib

  • *
  • Post: 3226
  • Reputazione: 110
    • Mostra profilo
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #2 il: 15 Maggio 2013 ore 18:48 »
Ma la data di accesso ce l'hai?

In tal caso dipende dal DB.
Se non ricordo male in oracle si usava una
SELECT TOP N FROM TABLE_XXX WHERE .... ORDER BY DATA_ACCESSO DESC

Se non è diponibile la top potresti leggerti da programma (si chiamano ancora cursori?) i primi N record che fornisce la query precedente (senza TOP, ovviamente)

Spero di aver capito la domanda...

Offline rodolforizzo76

  • *
  • Post: 180
  • Reputazione: 2
  • Aaron Nimzowitsch
    • Mostra profilo
    • painteronline.org
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #3 il: 15 Maggio 2013 ore 21:55 »
elvis@

Anche io credo che dovrei creare una nuova tabella per gestire questo tipo di risultato, solo che ho le idee un po confuse. Non ho capito cosa intendi per "una associazione uno-a-molti tra gli utenti e i quadri. "... non è che potresti spiegarmelo come lo spiegheresti a "tua nonna"? Credo che se riesco ad afferrare bene il concetto poi dovrei riuscire a implementarlo.

dinolib@

Purtroppo la data di accesso non ce l'ho.. ho solo la data di quando è stato inserito il quadro, che non credo possa servire allo scopo.


Sei un artista? Visita il mio sito http://www.painteronline.org

Offline elvis

  • *
  • Post: 136
  • Reputazione: 9
    • Mostra profilo
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #4 il: 15 Maggio 2013 ore 23:54 »
elvis@

Anche io credo che dovrei creare una nuova tabella per gestire questo tipo di risultato, solo che ho le idee un po confuse. Non ho capito cosa intendi per "una associazione uno-a-molti tra gli utenti e i quadri. "... non è che potresti spiegarmelo come lo spiegheresti a "tua nonna"? Credo che se riesco ad afferrare bene il concetto poi dovrei riuscire a implementarlo.
Per associazione uno-a-molti si intende che ogni utente è associato ad uno o più quadri. Tecnicamente, in questa nuova tabella hai una riga per ogni utente, ed ogni riga ti dice quali quadri ha visto questo utente. Ripensandoci però ti serve un'associazione molti-a-molti, perchè se è vero che devi associare un utente a più quadri, dovresti anche permettere ad un quadro di essere associato a più utenti (con la uno-a-molti non puoi farlo).

Questa è l'idea "a parole", poi per implementarla devi conoscere il concetto di primary key, foreign key, e relativa sintassi SQL. Con un pò di pazienza e qualche ricerca in rete, dovresti trovare tonnellate di materiale sull'argomento.
Pc Config
--phenom x4 965 @ 3.4 ghz
--corsair 8GB ddr3
--nvidia gtx 460
--ocz agility 3 60GB (chakra)
--crucial m4 128GB (windows 8.1)

Offline rodolforizzo76

  • *
  • Post: 180
  • Reputazione: 2
  • Aaron Nimzowitsch
    • Mostra profilo
    • painteronline.org
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #5 il: 16 Maggio 2013 ore 00:12 »
ok, ci lavoro su, tengo aperto il topic nel caso avessi qualche domanda e grazie per i consigli. Non appena risolvo (se risolvo) metto "topic risolto".

Ciao e grazie ancora.


Sei un artista? Visita il mio sito http://www.painteronline.org

Offline jmc

  • *
  • Post: 1354
  • Reputazione: 95
    • Mostra profilo
    • The Chakra Project
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #6 il: 16 Maggio 2013 ore 00:30 »
La domanda non è formulata benissimo: la query dipende dallo schema del database, quindi non ti si può rispondere con esattezza. Se invece cerchi consigli su come impostare lo schema (e di conseguenza le query), allora si può fare, ma ti inviterei ad esporre più precisamente qual è lo stato attuale delle cose e i tuoi requisiti. :)

Offline rodolforizzo76

  • *
  • Post: 180
  • Reputazione: 2
  • Aaron Nimzowitsch
    • Mostra profilo
    • painteronline.org
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #7 il: 16 Maggio 2013 ore 00:37 »
Una domanda: se ogni volta che qualcuno visualizza un quadro nel sito una query insert va a popolare la tabella appositamente creata nel database, come posso evitare di avere una moltitudine di record? a me interessa sapere gli ultimi 30/40 quadri visti.

pensare di cancellare i record in eccesso con un'altra query mi sembra una soluzione possibile ma ho un dubbio... i nuovi record dovrebbero, al momento dell'inserimento, essere messi al primo posto e non in coda. Giusto?

É possibile?


Sei un artista? Visita il mio sito http://www.painteronline.org

Offline rodolforizzo76

  • *
  • Post: 180
  • Reputazione: 2
  • Aaron Nimzowitsch
    • Mostra profilo
    • painteronline.org
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #8 il: 16 Maggio 2013 ore 00:54 »
jmc@

Queasta è la tabella images:

Codice: [Seleziona]
Field Type Null Key Default Extra
image_id int(11) NO PRI NULL auto_increment
image_caption varchar(255) NO NULL
image_username varchar(255) NO NULL
image_date date NO NULL
image_genere varchar(255) NO NULL
image_link varchar(255) NO NULL
image_thumb_link varchar(255) NO NULL
image_description varchar(255) YES NULL
image_width varchar(255) YES NULL
image_height varchar(255) YES NULL


ma penso che dovrò creare una tabella apposta per poter visualizzare gli ultimi quadri visti.


Sei un artista? Visita il mio sito http://www.painteronline.org

Offline rodolforizzo76

  • *
  • Post: 180
  • Reputazione: 2
  • Aaron Nimzowitsch
    • Mostra profilo
    • painteronline.org
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #9 il: 16 Maggio 2013 ore 01:15 »
...e poi un'altra domanda:
come si fa a fare in modo che ogni volta che qualcuno clicca su un link per visualizzare un quadro, venga eseguita una query che popola la tabella del db? si può fare?


Sei un artista? Visita il mio sito http://www.painteronline.org

Offline dinolib

  • *
  • Post: 3226
  • Reputazione: 110
    • Mostra profilo
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #10 il: 16 Maggio 2013 ore 07:44 »
Certo dovrai crearti una tabella images_access dove indicare id_image, id_utente, data_accesso (tutti e tre chiave primaria).
Dovrai poi collegare la visita ad una immagine alla chiamata di aggiornamento del DB.

Hai due modi per la gestione:
1- la insert semplicemente scrive una riga. La select sceglie gli ultimi visti dall'utente (come visto nella select precedente). Ogni tanto lanci una query di pulizia che elimina, chessò, gli accessi più vecchi di un mese o per ogni utente ne limita il numero a 50.
In tal modo le insert saranno veloci.

2-durante la insert vai anche a cancellare per l'utente che ti interessa le vecchie visite secondo i parametri che ti sei imposto (vecchiaia e numero). La select lavora sempre con la TOP (puoi anche evitarlo, ma così hai più flessibilità). Non ti servirà più lanciare la query di pulizia.
Questo sistema è di facile gestione anche se potrebbe richiedere un po' di tempo l'insert (in realtà con gli indici dovrebbe essere molto rapida). Non credo tu abbia migliaia di accessi al minuto, vero?

La pulizia potrebbe essere tipo:

DELETE FROM images_access WHERE id_utente=utente AND data_accesso < data
(ora devo andare al lavoro. aggiungerò il pezzo con una NOT IN per lasciare un numero minimo di record per utente)


Offline rodolforizzo76

  • *
  • Post: 180
  • Reputazione: 2
  • Aaron Nimzowitsch
    • Mostra profilo
    • painteronline.org
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #11 il: 16 Maggio 2013 ore 10:21 »
dinolib@

Citazione
Dovrai poi collegare la visita ad una immagine alla chiamata di aggiornamento del DB.

non so cosa sia una vista e un immagine alla chiamata di aggiornamento. (per la vista penso di riuscire a documentarmi), l'immagine alla chiamata di aggiornamento non l'ho mai sentita.

pensavo fosse più facile da fare, ma la vedo dura.. 

Citazione
1- la insert semplicemente scrive una riga. La select sceglie gli ultimi visti dall'utente (come visto nella select precedente). Ogni tanto lanci una query di pulizia che elimina, chessò, gli accessi più vecchi di un mese o per ogni utente ne limita il numero a 50.
In tal modo le insert saranno veloci.

non capisco come e quando dovrebbe avvenire la insert, se voglio fare eseguire una query la metto nel codice nel punto dove voglio che venga eseguita, ma come faccio a fare eseguire una query ogni volta che uno visualizza un quadro?

si, mi sa che voglio fare il passo più lungo della gamba. Credo che devo studiare un po di roba.


Sei un artista? Visita il mio sito http://www.painteronline.org

Offline dinolib

  • *
  • Post: 3226
  • Reputazione: 110
    • Mostra profilo
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #12 il: 16 Maggio 2013 ore 11:14 »
Calma e gesso  ;D
Premessa: non so che tecnologia hai utilizzato sul tuo sito. Chiedendo info su una query pensavo fossi abbastanza esperto di scripting lato server! Ho dato per scontato molte cose.

Come dice jmc prima dovresti darci un minimo di indicazioni sulla architettura del tuo sito (linguaggio server (perl,php,asp,.net,java,cgi,altro?) e client (penso sia js), DB server). Poi dovremmo capire come funziona il tuo hosting. Hai accesso completo al server?

La parte di collegare la visita ecc. è solo una breve analisi di cosa fare ad alto livello. Intendo: quando un utente visita una pagina (immagino sia una pagina dinamica, giusto?) questa va ad attivare lato server una serie di operazioni per estrarre il quadro dal DB, ecc. Qui vanno inserite le operazioni di insert e delete per aggiornare la tabella delle visite.
Se ho tempo visito il tuo sito, da lì qualcosa si capisce

Offline dinolib

  • *
  • Post: 3226
  • Reputazione: 110
    • Mostra profilo
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #13 il: 16 Maggio 2013 ore 11:17 »
OK, già si vede che hai php lato server (jmc! il tuo amore  ;)).
La pagina visual1.php che fa? Lì dentro si andrà a leggere i quadri che uno visita. Io partirei da lì a studiare il codice e capire che si può fare.

PS: ma il sito l'hai realizzato tu da zero o hai usato un qualche strumento di content management?

PPS: purtroppo io posso aiutarti solo su SQL, è da 10 anni che non lavoro e mi aggiorno su server scripting :-(

Offline rodolforizzo76

  • *
  • Post: 180
  • Reputazione: 2
  • Aaron Nimzowitsch
    • Mostra profilo
    • painteronline.org
Re:Consiglio su query sql per visualizzare ultimi record visti
« Risposta #14 il: 16 Maggio 2013 ore 11:37 »
si, il sito l'ho realizzato da zero senza l'uso di alcun cms, mi sono avvalso di uno script già pronto per la gestione dei login (dev.login) che ho trovato in rete e per le query un po più complesse sono stato aiutato da Salvatore (alias re-verse) - Moderatore del forum di MySQL-Italia (che forse non è più attivo), il quale ha contribuito scrivendo molte delle query sql che interrogano il database.

Il file visual1.php in pratica esegue questa query:

Codice: [Seleziona]
$sql = "SELECT * FROM images, dl_user WHERE images.image_genere = '$genere' AND dl_user.username = images.image_username GROUP BY image_username ORDER BY RAND() ASC LIMIT " . $inizio . ", " . $fine;

e poi un ciclo for dispone nella pagina tutti i pittori disponibili per il genere selezionato. Ma per vedere i quadri si deve cliccare su un pittore che ti porterà alla pagina visual_ctg.php dove sarà possibile visualizzare i quadri appartenenti al pittore selezionato in visual1.php



Sei un artista? Visita il mio sito http://www.painteronline.org

 

Template by Homey | Sito ufficiale | Disclaimer