Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Query MySQL nidificata (era: aiuto scrittura query mysql)

    Buongiorno! Sarò breve: ho due tabelle: utenti e immagini.
    Nella tabella utenti ci sono questi campi:
    id nome nick sesso (id auto_increment)
    Nella tabella immagini invece:
    id_immagine id_utente percorso (id_immagine auto_increment)
    Dal momento che voglio estrarre tre immagini casuali (un utente può inserire più di un'immagine) di 3 utenti diversi tutti di sesso femminile, come posso scrivere la query?

    Io ho provato vari metodi ma o non funzionano o devo scrivere più e più query (anche perchè non ho la certezza che un dato utente abbia inserito anche solo un'immagine!)
    grazie in anticipo!!

    Irais
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select utenti.nome,immagini.percorso from immagini
    inner join utenti on utenti.id = immagini.id_utente
    where utenti.sesso = 'f'
    group by utenti.nome 
    order by rand()
    limit 3

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Se puoi usare le subquery è meglio una query del genere
    codice:
    select utenti.nome,immagini.percorso from (
    select * from immagini order by rand() ) as immagini
    inner join utenti on utenti.id = immagini.id_utente
    where utenti.sesso = 'f' 
    group by utenti.nome 
    order by rand()
    limit 3

  4. #4
    wow grazie gentilissimo!! Domani le provo!! Figurati che io andavo con 6 query e 3 while, con generatori di numeri casuali!! (si, se vuoi puoi prendermi per il cu*o! )
    Mi hai risolto un problema mica da poco (e mi hai ottimizzato lo script alla grande!!)
    Grazie ancora!

    Edit:Ma non c'è il rischio che mi estragga due immagini dello stesso utente così? O.ò
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao. No, i dati sono raggruppati per utente quindi non c'è la possibilità che vengano estratte due immagini dello stesso utente. Con la prima query però verrebbe estratta sempre la prima immagine inserita da ciascun utente. Con la seconda, se come ti ho detto puoi sfruttare le query annidate, mischi prima i record, in maniera che l'immagine estratta per gli utenti che hanno inserito più immagini possa sempre essere diversa.
    Provale e fammi sapere.

  6. #6
    grazie mille, gentilissimo!!
    Vada per la seconda allora, tanto se non sbaglio la versione di MySQL installata sul mio webserver dovrebbe supportare le subqueries!
    Ah, un'ultima domanda (sorry mi sono dimenticato di scriverlo nel primo post): la tabella immagini, ovviamente, ha gli id che non sono sempre continui (colpa del fatto che qualche utente ha eliminato la tale immagine)... Questa query mi sembra che, una volta preso un utente, si "aggrappi" alla chiave "id_utente", quindi gli id non se li fila manco di striscio... Dico bene? Scusa la pignoleria ma sulle query non sono ancora molto ferrato ^^
    Grazie ancora!
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Per poter sfruttare le subquery devi avere almeno la versione 4.1 di mysql.
    Il fatto che gli id non siano contigui poco importa. Si presuppone che tutti i record inseriti nella tabella immagini siano relativi a degli id (e quindi a degli utenti) presenti nella tabella utenti.
    Lancia la query un pò di volte e vedi se ti restituisce sempre i risultati che vorresti.

  8. #8
    ok grazie mille ancora!!
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  9. #9
    ciao nicola, scusa se rompo ancora, ma c'è qualcosa che non va e non ne vengo a capo.. :master:

    La query (che purtroppo ho dovuto modificare per adattarla ad una nuova struttura del db) che faccio è questa:
    codice:
    select dati.sex, dati.nick, dati.birthdate, immagini.smallimg from (select * from immagini order by rand() ) as immagini inner join dati on dati.uid = immagini.uid where dati.sex = 'f' group by dati.nick order by rand() limit 2
    ma mi ritorna questo errore:
    codice:
    #1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from immagini order by rand() ) as immagini inner join
    Pensavo fosse per la query nidificata, ma la versione del db è MySQL - 4.0.27 quindi dovrebbe andare bene....

    Per completezza ti espongo la nuova "struttura" (che alla fine cambiano solo i nomi):
    tabella dati:
    uid nick sex birthdate

    tabella immagini:
    uid smallimg largeimg

    (anche se largeimg non viene utilizzata in questo ambito)...
    Mi son limitato a sostituire i nomi (e ad aggiungere alcuni campi) alla query che mi hai dato tu... Ma il problema sorge quando cerco di aprire una sottoquery... è possibile che siano "disabilitate" o qualcosa del genere?
    :master:
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da nicola75ss
    Per poter sfruttare le subquery devi avere almeno la versione 4.1 di mysql.
    la tua versione è inferiore e non ti consente di usare le subquery.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.