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

    MySQL query da più tabelle

    Salve,
    chiedo scusa per la domanda forsebanale, ma dovrei fare una query che tiri fuori dati da due taballe e con due condizioni.

    con una faccio così:

    $con = connessione al db
    $result = mysqli_query($con,"SELECT * FROM user WHERE flg_access = 0 ");
    while($row = mysqli_fetch_array($result))

    ora dovrei fare la stessa cos ama inserendo una ulteriore condizione
    il risultato dovrebbe essere
    "SELECT * FROM user WHERE flg_access = 0; "SELECT * FROM user_type WHERE id_type =2 "

    il risultato dovrebe essere tutti gli user che hanno la condizione 0 nel flg_access e che appartengono alla id_type 2 della tabella user_type

    Ci sto sbattendo la testa leggo ovunque.. ma non trovo un esempio che sia tipo la mia richiesta...

    Grazie a tutti
    M.

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    devi fare una join su un campo comune tra le due tabelle

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    imola
    Messaggi
    47
    ci vuole una "join" , condizione essenziale è che in entrambe le tabelle vi sia un campo "comune" , poi

    SELECT * FROM user , user_type
    WHERE flg_access = 0
    AND id_type = 2
    AND campocomune.user = campocomune.user_type

  4. #4
    Quote Originariamente inviata da antonioimola Visualizza il messaggio
    ci vuole una "join" , condizione essenziale è che in entrambe le tabelle vi sia un campo "comune" , poi

    SELECT * FROM user , user_type
    WHERE flg_access = 0
    AND id_type = 2
    AND campocomune.user = campocomune.user_type
    Ok, quindi il campo comune è " id_type "

    quindi secondo il tuo esempio se non capisco male dovrebbe essere così?

    SELECT * FROM user , user_type
    WHERE flg_access = 0
    AND id_type = 2
    AND id_type.user = id_type.user_type

    Scusate... sto cercando di imparare...

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    imola
    Messaggi
    47
    direi di si però la sintassi dell'ultima "AND" dovrebbe essere :

    AND USER.id_type = USER_TYPE.id_type

    cioè va indicata prima la tabella e poi la colonna

    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    imola
    Messaggi
    47
    dal momento che la colonna "id_type" è comune alle 2 tabelle la devi qualificare anche nella prima "AND" per cui da

    AND id_type = 2

    diventa

    AND user_type.id_type = 2

  7. #7
    Ottimo,
    finalmente comincio a capire...

    adesso questo sistema con le correzioni finali funziona in PHPmyAdmin, ma nel php meno... ovvero mi da come risultato il nome della chiave id_type e non il nome della tabella user .

    per spiegare meglio, due tabelle user e user_type.
    dentro a user ho campo name e id_type

    dentro a user_type ho due opzioni 1 (id_type ) carico, e 2 (id_type) scarico


    Partendo da questo codice:

    $result = mysqli_query($con,"SELECT * FROM user , user_type
    WHERE flg_access = 0
    AND user_type.id_type = 2
    AND user.id_type = user_type.id_type;");
    while($row = mysqli_fetch_array($result))
    {
    $cliente = $row['name'];
    $documenti = $row['id_type'];

    il mio risultato è

    $cliente = scarico ( scarico è associato alla chiave 2 )
    $documenti = 2 ( che è la chiave.... )

    io dovrei ottenere invece

    $cliente = nome cliente campo name dentro a user
    $documenti = scarico

    ovviamente visualizzando solo quelli che hanno il campo " scarico" e tralasciando quelli che hanno il campo 1 (carico)

    Sto a 3 moment act.... non dico altro...

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    codice:
    SELECT * FROM user u INNER JOIN user_type ut ON u.id_type = ut.id_type
    WHERE flg_access = 0
    AND id_type = 2
    però ti consiglio di prendere solo i campi che ti servono da ogni tabella

  9. #9
    Quote Originariamente inviata da clasku Visualizza il messaggio
    codice:
    SELECT * FROM user u INNER JOIN user_type ut ON u.id_type = ut.id_type
    WHERE flg_access = 0
    AND id_type = 2
    però ti consiglio di prendere solo i campi che ti servono da ogni tabella

    Ciao Clasku, grazie mille per la query, ho provato a passarla in phpmyadmin e mi da #1052 colum id_type in where clause is ambiguos
    in realtà ho capito la logica della query, ma "u" e "ut" no.
    posso chiederti cosa sono?

    grazie mile
    M.

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ti dice che la colonna esiste nelle due tabelle, quindi non sa dove cercare
    devi correggere così
    codice:
    SELECT * FROM user u INNER JOIN user_type ut ON u.id_type = ut.id_type
    WHERE u.flg_access = 0
    AND u.id_type = 2
    u e ut sono alias per i nomi delle tabelle, per evitare di scrivere ogni volta tutto il nome

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.