Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    15

    [PHP/MySQL] Query di più valori contando in diverse tabelle

    Qualcuno mi può aiutare con una quesry che non riesco proprio a fare?

    Mettiamo che ho 3 tabelle in mysql:

    codice:
    Tabella nome (nomi di animali per esempio)
    
    id_nome int
    nome varchar
    altrecoseinutili
    
    
    Tabella abilities (abilità che un animale può avere, cammina a 2 zampe a 4 rumina etc)
    
    id_ability int
    abilita varchar
    difficolta int (quanto è difficle questa cosa per l'animale? è fittizia la cosa cmq cercate di capire :P)
    max int (può imparare massimo "max" abilità di una detta difficoltà)
    
    
    Tabella nome_abi (assegnazione di una o più abilità ad un animale)
    id_nomabi int
    id_nome int
    id_abilty int
    altrecose
    In pratica mettiamo che ci sia il camminare a 2 zampe o a 4 zampe che hanno la difficoltà 1, mentre il parlare e l'usare le posate ha difficoltà 2. Aggiungetegi una 10 di esempi per ogni difficoltà ok? Fatto? Ora mettiamo che la scimmia possa apprendere "max" 2 abilità di difficoltà 2 e "max" 4 della difficoltà 1.

    Con una query mi servirebbe contare quante abilità della stessa difficoltà conosce già un animale quindi è resgistrato in nome_abi, per ogni livello di difficoltà, e che mi resituisca il valore della difficoltà.

    Per esempio "scimmia" sa camminare a 2 e 4 zampe, quindi sa usare 2 abilità di difficoltà 1. Mi deve quindi resituire difficoltà 1, quantità 2 per "scimmia".

    Me sa che non sono stato tanto chiaro spero riusciate ad aiutarmi... in caso chiedete proverò ad essere più chiaro.

    Grazie in anticipo!

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    442
    Tabella nome_ani
    id_nome int
    nome varchar

    Tabella abilities (abilità che un animale può avere, cammina a 2 zampe a 4 rumina etc)
    id_ability int
    id_nome1(chiave esterna)
    abilita varchar
    difficolta int
    max int

    in questo modo avendo la chiave esterna in abilities sai gia quel tipo o quantita di abilita sonocollegate a quell'animale

    select * from nome_ani,abilities where id_nome.nome_ani=id_nome1.abilities;

    in questo modo ti vengono fuori tutti gli animali con le rispettive abilita

    per contare le abilità o lo fai tramite queri oppure tramite php ossia salvi in un campo il valore di una variabile che conta il valore di variabile

    non so se era questo che volevi o prova a rispiegarmelo

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    15
    Grazie per la risposta lowen appena trovo tempo la proverò.

    Nel frattempo sono cmq riuscito a fare qualcosa, cioé questo:

    Codice PHP:
    SELECT COUNT(a.difficolta),a.difficolta,a.max FROM nome_abiAS naabilities AS a WHERE na.id_nome=$nome AND na.id_ability=a.id_ability GROUP BY(a.difficoltaORDER BY a.difficolta asc 
    Fatto ciò poi faccio i controlli sul count e il max etc.

    Però volevo integrare questo controllo nella quesry, in modod da farmi resituire solo righe che non fossero già uguali al max.

    Ho quindi modificato la quesry come segue:
    Codice PHP:
    SELECT COUNT(a.difficolta),a.difficolta,a.max FROM nome_abiAS naabilities AS a WHERE na.id_nome=$nome AND na.id_ability=a.id_ability AND COUNT(a.difficolta)<=a.max GROUP BY(a.difficolta
    che per me dovrebbe funzionare invece mi dà errore dicendo ceh è un uso invalido della funzione group by. non capsico. Credo sia chiaro quello che ho cercato di fare nella seconda query, c'è un modo corretto per farlo?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    442
    ciao,
    scusa ma senza complicarti all'estremo la vita prova cosi:
    Codice PHP:
    tabella nome

    id_nome int autoincrement
    nome varchar 
    (nome dell'animale)
    max_abilita int (quante abilita di tale difficolta conosce l'
    animale)
    max_diff  int(livello di difficolta)


    tabella abilities

    id_ability int autoincrement
    abilita varchar  
    (descrizione abilità)
    diff  int (difficolta abilità)

    Tabella nome_abi (assegnazione di una o più abilità ad un animale)
    id_nomabi int autoincrement
    id_nome int  
    (foreign key a id_nome della tab nome)
    id_abilty int  (foreign key a id_ability della tab abilities)

    quindi per la prima tabella nome avrai ad esempio

    scimmia
    2
    1

    scimmia
    4
    1


    per la seconda tabella

    camminare 2 zampe
    1

    camminare 4 zampe
    1

    parlare
    2

    usare posate
    2


    in questo modo 
    per la prima tabella senza che lui ti stampi due volte scimmia usi semplicemente distinct

    no piu semplice
    !! 

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