Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [MySQL] Problemi di query

    Salve a tutti, sono nuovo di questo forum, ma le guide proposte su questo sito le ho sempre prese come punto di riferimento per il mio apprendimento!

    Vi illustro un problema che ho incontrato nella creazione di determinate query.
    In pratica ho 3 tabelle di un database:
    Utente (id, nick, password, nome, tipo)
    Guide (id, nome, tipoutente, tipofile)
    Articoli (id, nome, uploader)

    Vi descrivo le 3 tabelle: la tabella utente diciamo che svoglie il fulcro di questo database, può accedere alla tabella guide e alla tabella articoli, mentre la tabella guide non ha collegamento con la tabella articoli.
    Esistono 2 tipologie di utenti: i master, che possono visualizzare tutte le guide, e invece i limitati che possono visualizzare solo le guide rivolte a loro!

    Il mio problema è che devo realizzare questa query, e mi sono un po arenato:
    Visualizzare tutti gli utenti master registrati, e in più visualizzare le tutte guide scelte dagli utenti master.

    Mi soffermo su questa query, l'altra è più o meno similie, ma vorrei capire il meccanismo.
    Come posso creare questa query?

    Un saluto a voi tutti, e spero di trovare un aiuto in questa community!

  2. #2
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    431
    Se ho capito bene quello che ti serve le query non dovrebbero essere difficili

    La prima:

    codice:
    SELECT Nick FROM Utente WHERE tipo = 'master'
    la seconda:

    codice:
    SELECT id, Nome FROM Guide WHERE tipoutente = 'master'
    Ciao!

  3. #3
    Ciao r1cky` e grazie per aver risposto!
    Dunque, è una stessa query che praticamente deve visualizzare tutti gli utenti di tipo master e ogni guida scelta dall'utente master!

    Mi spiego meglio... Supponiamo che sia registrato un certo Rossi, che è un utente master, e questo Rossi ha visualizzato 2 guide (A e B).
    La query mi deve far vedere tutti gli utenti master, compreso il signor Rossi, e le guide visualizzate da ogni utente (nel caso del signor rossi A e B).

    La prima query da te implementata sono riuscito a crearla da me, ma è la seconda che non riesco a creare.
    Comunque è una sola query che deve fare questo giochetto.

    Mi scuso se non lo sono stato prima, ma spero che ora sia più chiaro.

  4. #4
    Hai provato utilizzando le JOIN?

    Con qualcosina tipo:
    Codice PHP:
    SELECT ...
    FROM Utente AS u
    JOIN Guide 
    AS g ON u.xxx g.yyy
    WHERE u
    .zzz 'Master' 
    ovviamente per fare qualcosa di questo tipo ti serve che le due tabelle (utente e guide) abbiano un attributo in comune (una delle due abbia un attributo che sia chiave esterna dell'altro).

    ad esempio in "guide" ci dovrebbe essere un attributo (es. "idutente") che si riferisca ad un utente.
    bisogna vedere quindi anche come hai strutturato le tabelle e se sono strutturate bene.

    oppure ti servirebbe una tabella terza che ti riporti la relazione tra il utente e guide, ad esempio:

    codice:
    CREATE TABLE scelti (
       idutente ...,
       idguida ...
    )
    così puoi utilizzare questa tabella per avere le tue informazioni.
    Administrator of NAMDesign.Net

  5. #5
    Si diciamo che la tabella utenti ha come chiave primara ID, e chiave esterna IDutente.

    Il problema è che bisogna creare una sorta di confronto!.. In un linguaggio di programmazione magari qualcosa del genere l'avrei implementata, ma in sql non ci riesco.

    Cioè dovrebbe uscire a parole una cosa del genere:

    Tabella Guide contiene: Guida A, Guida B, Guida C, Guida D
    Tabella Utenti contiene: Utente Rossi, Utente Bianchi

    La domanda è la seguente: Quali guide l'utente rossi ha scelto?

    La domanda non'è chi ha postato le guide, ma chi ha scelto determinate guide.
    Da quel che posso immaginare è che la query stampata dovrà restituire tipo questi valori (prendendo il caso che magari Rossi ha scelto le guide A e B):
    ID - Nick - Rossi - Master - Guida A - Guida B

    Il mio problema è appunto come far a stampare più risultati che derivano da una sola tabella?

    Forse una scelta di tipo bouleana?

  6. #6
    Al massimo puoi avere una cosa del genere:

    Codice PHP:
    IDUtente   - ... - Guida
    Rossi      
    - ... - A
    Rossi      
    - ... - B
    Rossi      
    - ... - 
    Administrator of NAMDesign.Net

  7. #7
    E però questo discorso lo dovrei fare in fase di inserimento dati?
    Ossia quando vado a registrare un utente nel DB, devo mettergli anche il campo guidascelta? E se ne ha scelta più di una?... Devo registrare doppiamente lo stesso utente?

    E' un po un pasticcio..

    E' lo stesso discorso di quando uno scarica un file e c'è un contatore che ti dice: tu hai scaricato questo file 1 volta.
    Poi lo vai a riscaricare e ti dice: tu hai scaricato questo file 2 volte. E così via..

    Se non mi pare di aver capito male dovrebbe fare una cosa del genere.

    Caccio fuori un istruzione, magari vi potrebbe essere d'aiuto.
    Può servire un DISTINCT?

    Grazie ancora per dedicarmi il vostro tempo

  8. #8
    ciao, per funzionare a dovere dovresti avere una struttura di questo tipo:

    Codice PHP:
    CREATE TABLE utente (
       
    idutente INT(11NOT NULL auto_increment,
       
    nome VARCHAR(64NOT NULL,
       
    cognome VARCHAR(64NOT NULL,
       ...
    );

    CREATE TABLE guida (
       
    idguida INT(11NOT NULL auto_increment,
       
    titolo VARCHAR(255NOT NULL,
       ...
    );

    CREATE TABLE utente_guida (
       
    idutente INT(11NOT NULL,
       
    idguida INT(11NOT NULL,
       
    scelta INT(6NOT NULL DEFAULT '0'

    ogni volta che un cliente scarica/legge una guida inserisci o aggiorni i dati in utente_guida.

    ed alla fine per prendere le informazioni utilizzi la tabella "utente_guida" per ricreare le relazioni.
    Administrator of NAMDesign.Net

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