Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    residenza
    Torino
    Messaggi
    18

    Recuperare variabile con lo stesso id dalla stessa tabella

    Ciao!
    Ho una query per recuperare i valori mia tabella. Tutto funziona bene, ma devo "sovrascrivere" il valore "id" con un nome utente.

    Questa è la mia query:

    `= $ Myquery"
    SELEZIONARE
    A.id, a.name, a.description, a.total_amount, a.contract_account_id, a.created_by, a.description, a.status, a.deleted AS annullato,
    Ax.id_c, ax.opzione_furto_c, ax.mesi_c, ax.data_stipula_c, ax.rinnovo_c,
    B.id AS id_cliente, nome b.name come nome_utente,
    C.id AS id_ utente, c.first_name, c.last_name, c.reports_to_id
    DA aos_contracts COME INNER JOIN aos_contracts_cstm AS asse ON ax.id_c = a.id INNER JOIN account AS b ON b.id = a.contract_account_id INNER JOIN utenti AS c ON c.id = a.created_by
    DOVE a.deleted = 0 ";

    Devo utilizzare il valore c.reports_to_id per ottenere c.first_name e c.last_name in modo da poterli visualizzare nella mia stringa alla variabile $sm_cognome
    echo "<tr><td width='10%'>".$codice_contratto."</td>....<td width='15%'>".$sm_cognome."</td></tr>";`

    Uso un while loop per ottenere i miei dati
    `while ($ row = mysql_fetch_array ($result, MYSQL_ASSOC))`
    E alla voce ".$sm_cognome." ottengo un ID.
    L'id è nella stessa tabella quindi avrei bisogno di "convertire" l'id in un nome.

    Fondamentalmente ho bisogno di ottenere un'altra clausola WHERE per ottenere il nome ma senza cambiare la mia prima query.

    Nel mio ciclo ho la variabile $sm che è $sm= $ row ['reports_to_id']; avrei bisogno di qualcosa di simile da poter inseire nel mio ciclo while:
    'SELECT * FROM users DOVE report_to_id = id'
    E ottenere variabili nome cognome da sostiutire all'id visualizzato.

    Qualcuno può aituarm?

    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non capisco.

    PS : ma la query è davvero scritta come l'hai scritta ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    residenza
    Torino
    Messaggi
    18
    Ciao Badaze,
    no scusami, ho fatto un copia/incolla sbagliato...

    Questa è la query

    $estrazione="
    SELECT
    a.id, a.name, a.description, a.total_amount, a.contract_account_id, a.created_by, a.description, a.status, a.deleted AS cancellato,
    ax.id_c, ax.opzione_furto_c, ax.mesi_c, ax.data_stipula_c, ax.rinnovo_c,
    b.id AS id_cliente, b.name AS nome_cliente,
    c.id AS id_utente, c.first_name, c.last_name, c.reports_to_id
    FROM aos_contracts AS a INNER JOIN aos_contracts_cstm AS ax ON ax.id_c = a.id INNER JOIN accounts AS b ON b.id = a.contract_account_id INNER JOIN users AS c ON c.id = a.created_by
    WHERE a.deleted = 0";

    Così ottengo l'elenco dei contratti dell'azienda, e come dicevo funziona tutto correttamente.

    Nel ciclo while, recupero tutte le variabili e stampo questo:

    echo "<tr><td width='10%'>".$codice_contratto."</td><td width='5%'>".$stato."</td><td width='5%'>".$op_furto_txt."</td><td width='5%'>".$mesi."</td><td width='15%'>".$cliente."</td><td width='5%'>€ ".$tot_contratto."</td><td width='5%'>".$data_stipula_it."</td><td width='5%'>".$data_fine_it."</td><td width='15%'>".$utente_cognome." ".$utente_nome."</td><td width='15%'>".$sm."</td></tr>";

    La variabile $sm, recupera c.reports_to_id che è un id. Io vorrei che fosse visualizzato il nome e il cognome relativo a quell'id.
    La tabella "users" come vedi nella query (c.id AS id_utente, c.first_name, c.last_name, c.reports_to_id) ha questi due campi, dove il primo id è quello dell'utente e "reports_to_id" è praticamente l'id del suo "supervisore" che comunque è presente nella stessa tabella (sto utilizzando SuiteCrm).

    Quello di cui avrei bisogno è fare in modo che l'id estratto nel campo ".$sm." venga sostituito con il nome e il cognome dell'utente effettivo.

    Per fare un esempio più facile è un po' come recuperare i valori da una tabella all'altra, es:
    tab1 -> 0, 1, 2
    tab2 -> Mela, Pera, Banana
    Se estraggo la tabella 1, "se tab1 = 0 stampo Mela".
    Non posso creare a mano l'if perché gli utenti sono centinaia, quindi ho bisogno che vengano recuperati automaticamente.

    Pensavo di fare due query separate in modo da ottenere i risultati quindi, eseguo la prima dove ottengo l'id $sm poi eseguo la seconda
    'SELECT * FROM users WHERE report_to_id = $sm' estraggo la variabile $sm_nome= row2['first_name']; e nel mio echo al posto di ".$sm." metto ".$sm_nome.", ma non so come fare.

    Spero di essere stato più chiaro

    Grazie mille!
    Ultima modifica di ginorossi; 09-07-2017 a 11:21

  4. #4
    usa le JOIN

    nel tuo esempio

    Ordine
    IdOrdine
    IdCliente
    IdFrutto
    Quantita

    Frutti
    IdFrutto
    DescrizioneFrutto

    SELECT O.IdOrdine, F.DescrizioneFrutto FROM Ordini O INNER JOIN Frutti F ON O.IdFrutto=F.IdFrutto

    That easy!

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Quote Originariamente inviata da ginorossi Visualizza il messaggio
    [...]
    La variabile $sm, recupera c.reports_to_id che è un id. Io vorrei che fosse visualizzato il nome e il cognome relativo a quell'id.
    [...]
    scusa eh, ma se $sm prende un campo del risultato della query e hai il dato a disposizione nel recordset, se crei una variabile $nome che punta al campo della query che contiene il dato che ti serve e la mostri, hai finito...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2005
    residenza
    Torino
    Messaggi
    18
    Grazie Optime,
    quello lo sta già facendo.
    Il mio problema è che nell'elenco che ottengo il primo id che recupero è quello dell'utente che ha creato l'ordine, e fin qui tutto bene.
    Quindi nel mio risultato avrò ad es:
    Ordine 1 - Mario Rossi ecc.
    Ordine 2 - Mario Verdi ecc.

    Quindi la Join funziona correttamente
    Ogni ordine estratto però deve avere anche un referente che è il "supervisore" ($sm) di chi ha fatto l'ordine, che è presente nella stessa tabella users e che attualmente mi viene estratto come "codice" (che equivale all'id della prima colonna) quindi il mio elenco risulta

    Ordine 1 - Mario Rossi - 12345 ecc.
    Ordine 2 - Mario Verdi - 67890 ecc.

    vi allego parte del mio while

    while ($row= mysql_fetch_array($result, MYSQL_ASSOC)) {
    $codice_contratto= $row['name'];
    $stato = $row['status'];
    $mesi = $row['mesi_c'];
    $cliente= $row['nome_cliente'];
    $utente_nome= $row['first_name'];
    $utente_cognome= $row['last_name'];
    $sm= $row['reports_to_id'];

    Grazie Clasku, puoi spiegarmi meglio cosa intendi?

    Per ogni riga ho questo tipo di array

    0] => Array
    (
    [0] => 1073be50-9f5a-91ec-27d4-5954fbae42eb
    [id] => 1073be50-9f5a-91ec-27d4-5954fbae42eb
    [1] => 1171311526012
    [name] => 1171311526012

    [16] => 72a229d2-01b2-c105-43b1-594c00d3c060
    [id_utente] => 72a229d2-01b2-c105-43b1-594c00d3c060
    [17] => Mario
    [first_name] => Mario
    [18] => Rossi
    [last_name] => Rossi
    [19] => 9662d0df-83af-ba84-638b-58fdf71119c4
    [reports_to_id] => 9662d0df-83af-ba84-638b-58fdf71119c4
    )

    il primo id è quello della mia tabella ordini, il 16 è quello relativo all'utente che ha creato l'ordine
    (con relativo nome e cognome) e il 19 è l'id del supervisore (anch'esso presente in elenco nella tabella users).

    Non riesco a capire come dirgli di sostituire [reports_to_id] => 9662d0df-83af-ba84-638b-58fdf71119c4 con il
    nome e cognome del supervisore.

    Se creo una seconda query
    SELECT users.id AS id_ut, users.last_name AS cognome FROM users
    quindi pari a quella già inserita nella prima ottengo questo tipo di array
    [0] => Array
    (
    [0] => 9662d0df-83af-ba84-638b-58fdf71119c4
    [id_ut] => 9662d0df-83af-ba84-638b-58fdf71119c4
    [1] => Bianchi
    [cognome] => Bianchi
    )

    Quindi come dici giustamente tu, ho già il dato a disposizione; non capisco come utilizzarlo senza che tenga conto del primo array, quindi semplicemente considerando la "terza join"
    c.id AS id_utente, c.first_name, c.last_name, c.reports_to_id
    riportandomi così il nome e cognome dell'SM e non dell'utente.

    Puoi aiutarmi?

    Grazie mille!

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Avevo capito che il dato del nome del supervisore fosse compreso nel resultset originario
    Dato che non lo hai, direi che fare una nuova query con l'ID del supervisore sia la soluzione migliore

  8. #8
    gino, metti una seconda join, non ci sono problemi anche se punta alla stessa tabella

    Ordine
    IdOrdine
    IdCliente
    IdFrutto
    IdFruttoAlternativo
    Quantita

    Frutti
    IdFrutto
    DescrizioneFrutto

    SELECT O.IdOrdine, F.DescrizioneFrutto, FA.DescrizioneFrutto
    FROM Ordini O
    INNER JOIN Frutti F ON O.IdFrutto=F.IdFrutto
    INNER JOIN Frutti FA ON O.IdFruttoAlternativo=FA.IdFrutto



  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2005
    residenza
    Torino
    Messaggi
    18
    Grazie Optime per la risposta.
    magari non ho capito bene, ma il problema è che il mio campo "reports_to_id" (nel tuo caso "IdFruttoAlternativo") non è presente nella
    tabella "aos_contracts AS a" ma solo nella tabella "users", quindi facendo una seconda join mi sballa i risultati.

    Credo anche io che, come dice Clasku, la soluzione migliore sia eseguire una nuova query, il problema è che non so come farla lavorare
    all'interno del mio while.
    Come scrivevo nel post precedente, la logica mi porta a pensare che avrei bisogno di una query del genere:

    $estrazione2 ="SELECT users.id AS id_ut, users.last_name AS cognome FROM users WHERE users.id = '{$sm}'";
    recuperare la variabile es. "$sm_cognome= row2['last_name'];" e inserirla nel mio while.

    Il problema è che non so come fare, perché se assegno al mio while i due "result" con un AND ovviamente non funziona perché diciamo
    "somma" i risultati e quindi ottengo un elenco vuolo perché non c'è corrispondenza.

    Ho provato anche a gestire la cosa con due while

    while ($line= mysql_fetch_array($result))
    $rowset1[]=$line;

    while ($line2= mysql_fetch_array($result2))
    $rowset2[]=$line2;

    e gestire le stringhe tramite "foreach", ma non so come inserire il campo recuperato dal secondo while dentro
    foreach($rowset1 as $row1) {
    echo "....";
    }

    Qualche idea?

    Grazie mille, soprattutto per la pazienza

  10. #10
    Quote Originariamente inviata da ginorossi Visualizza il messaggio
    Grazie Optime per la risposta.
    magari non ho capito bene, ma il problema è che il mio campo "reports_to_id" (nel tuo caso "IdFruttoAlternativo") non è presente nella
    tabella "aos_contracts AS a" ma solo nella tabella "users", quindi facendo una seconda join mi sballa i risultati.
    non ho capito io, se il dato NON c'è, come lo puoi recuperare? Cerca di essere più chiaro per cortesia

Tag per questa discussione

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.