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

    [php/mysql] output di una query

    Ciao, in un db di prova ho creato 2 tabelle (tb1 e tb2).
    tramite script php eseguo questa query:

    Codice PHP:
    $q "SELECT nome FROM tb1 WHERE id=1 UNION SELECT pass FROM tb2 WHERE id=1"
    prelevo l'output così:

    Codice PHP:
    $record mysql_fetch_array($result);
    echo 
    $record['pass']; 
    ma prende solo il campo nome della prima tabella. come faccio per far uscire anche quello della seconda?

    grazie

  2. #2
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    codice:
    SELECT t1.nome, t2.pass
    FROM tb1 t1
    LEFT JOIN tb2 t2 USING(id)
    WHERE id = 1

  3. #3
    union ti rende le righe della prima tabella e poi le righe della seconda con la condizione che il tipo di campo sia lo stesso come pure lo stesso sara' il nome risolto nel result set.

    ma perche' mai fare due tabelle quando nome e passoword si presumono essere attributi dello stesso id?

    comunque non dovresti usare UNION, ma INNER JOIN
    codice:
    select a.nome, b.pass
    from tb1 a
    INNER JOIN tb2 b USING (id)
    where a.id = 1

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

  4. #4
    hai perfettamente ragione a riguardo della UNION. Però i due campi li ho separati apposta per una mia necessità. Spiego meglio...

    io ho uno script php che riceve tramite GET un id, in questo modo:
    script.php?id=1

    la query che elabora la variabile presa da url, è questa:

    Codice PHP:
    $q "SELECT nome FROM tb1 WHERE id=$id"
    io vorrei fare in modo, digitando da url la UNION, di prelevare anche un campo da un'altra tabella.
    Ecco perchè non ho utilizzato la INNER JOIN.

    Come posso fare?

  5. #5
    ammesso che il campo sia dello stesso tipo e che venga estratto solo un record (id=1) per ogni tabella avrai con union due righe di result set. la prima sara' quella della tb1 e la seconda quella della tb2

    se vuoi prima la "pass" inverti l'ordine delle tabelle oppure prendi il secondo record

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

  6. #6
    è proprio questo il punto.

    se la query è questa:
    SELECT nome FROM tb1 WHERE id=$id
    e da url digito:
    1 UNION SELECT pass FROM tb2 WHERE id=1

    la query diventa:
    SELECT nome FROM tb1 WHERE id=1 UNION SELECT pass FROM tb2 WHERE id=1

    ho provato con:
    echo $record[1];
    ma non stampa niente.

    cosa intendi per invertire l'ordine delle tabelle? e come faccio per prendere il 2° record?
    la query non posso modificarla.

    grazie dell'interessamento

  7. #7
    codice:
    $query = "
    select
    .....
    union
    select....";
    
    $res = mysql_query($query);      //esegui la query
    mysql_data_seek($res,1);          // sposta il puntatore 
    $row = mysql_fetch_row($res);   // leggi il record 
    echo $row[0];

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

  8. #8
    straordinario. ho imparato una cosa nuova.
    grazie mille!!!


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.