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

    problema estrazione dati da query

    ciao a tutti
    ho una query del tipo:
    codice:
    SELECT 
    * 
    FROM	
     problema
    INNER JOIN
     utenti
    AS
     utente_creatore
    ON
     problema.p_creatore=utente_creatore.u_id
    INNER JOIN
     utenti
    AS
     utente_modificatore
    ON
     problema.p_modificatore=utente_modificatore.u_id 
    WHERE
     problema.p_id=1
    che estrae, oltra ai record con id 1 della tabella problema, anche i dati relativi al creatore e al modificatore del record, salvati nella tabella utenti.

    Se però provo ad eseguire la query e la funzione
    Codice PHP:
    $letturamysql_fetch_array($result,MYSQL_ASSOC); 
    non ottengo distinzione tra $lettura[u_id] del creatore e $lettura[u_id] del modificatore, sono referenziate entrambi dalla stessa identica variabile.

    come fare per distinguerli?
    fox

  2. #2
    con campi di nome uguali nel result set l'ultimo in ordine di elenco sovrascrive il precedente. Dovresti usare un alias oppure cambiare il nome di un campo.

    select *, u.id as u_id, p.id as p_id

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    grazie per la risposta piero, questo però non risolve i miei problemi...

    io faccio join 2 volte sulla stessa tabella, dal momento che la tabella problemi contiene l'id sia dell'utente che ha creato il record sia di quello che lo ha modificato. Entrambi questi ID fanno riferimento ad un utente nella tabella utenti.

    quindi non posso dare un alias ai campi subito dopo il select, perchè il campo a cui darei l'alias è lo stesso...per lo stesso motivo non posso modificare il nome dei campi...
    fox

  4. #4
    Non ho guardato la query poiche' il quesito e' preciso e non necessita della query per avere una risposta.

    I campi con lo stesso nome sono sovrascritti. Se vuoi l'elenco dei campi crea una alias per ogni campo che ha lo stesso nome senza usare *

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Ciao grazie ancora, ho risolto.
    Il mio problema era che non credevo potessi fare riferimento alla tabella già con il suo alias subito dopo il "SELECT", perchè l'alias della tabella lo dichiaro solo dopo.

    ecco la query funzionante.

    Codice PHP:
    SELECT 
     
    * ,
     
    utente_creatore.u_id AS id_creatore,
     
    utente_modificatore.u_id AS id_modificatore
    FROM    
     problema
    INNER JOIN
     utenti
    AS
     
    utente_creatore
    ON
     problema
    .p_creatore=utente_creatore.u_id
    INNER JOIN
     utenti
    AS
     
    utente_modificatore
    ON
     problema
    .p_modificatore=utente_modificatore.u_id 
    WHERE
     problema
    .p_id=
    fox

  6. #6
    Originariamente inviato da foxissimo
    Ciao grazie ancora, ho risolto.
    Il mio problema era che non credevo potessi fare riferimento alla tabella già con il suo alias subito dopo il "SELECT", perchè l'alias della tabella lo dichiaro solo dopo.
    Non conta la posizione delle righe delle istruzioni ma la sequenza delle azioni del server.

    per primo risolve il nome delle tabelle e crea se esiste l'alias, poi risolve le condizioni del ON, using, where e crea una tabella temporanea che ingloba tutte le tabelle con i dati richiesti condizionati. A questo punto seleziona i campi richiesti dalla select, applica gli alias dei campi e poi mandera' il tutto nel buffer del resul set.

    Se provi ad applicare l'alias del campo alla condizione in where riceverai l'errore di campo inesistente, perche' l'alias al momento della risoluzione del where ancora non esiste anche se cronologicamente vengono descritti prima i campi in select.

    Poi ci sono le condizioni group by, having che agiscono dopo la creazione della tabella temporanea e prima della selezione dei campi formando a loro volta una selezione della prima selezione.... Poi l'order by che applica semplicemente un sort sul result set. Anche le subquery andrebbero analizzate ... anyway ..

    Descrizione maccheronica della sequenza del select....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    molto utile, grazie a nome di tutti!

    forse è meglio spostarla in SQL??
    fox

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.