Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: query due tabelle

  1. #1

    query due tabelle

    Ciao, è una stupida domanda di SQL (anche se all'atto pratico sto utilizzando MySQL).

    Ho due tabelle:

    video
    video_id | user_id | video_title | video_desc

    users
    user_id | username |

    Con una sola query vorrei ottenere
    video_title e video_desc dalla tabella video
    E anche username dalla tabella users
    di modo che video e users siano relazionati in qualche modo.

    Cioè, al posto dello user_id di video vorrei ottenere lo username corrispondente a quello user_id nell'altra tabella, ricevendo un risultato che contiene:
    video_title, video_desc, username

    Mi spiegate come si fa? Va bene anche una indicazione...

  2. #2
    Questo è un esempio

    Codice PHP:
    $query1 "SELECT user_id FROM users WHERE username LIKE $var";
    $query2 "SELECT video_title, video_desc FROM video WHERE video_id LIKE $a"
    $ris1 mysql_query($query1$db);
    $riss1 mysql_fetch_array($ris1);
    $a $riss1['user_id']
    $ris2 mysql_query($query2$db);
    $riss2 mysql_fetch_array($ris2);
    print (
    $a." ".$riss2['video_title']." ".$riss2['video_desc']); 

  3. #3
    Questa è una cosa alla base dei database relazionali, per ottenere quello che vuoi la query è la seguente:

    Versione semplice:
    codice:
    select video_title, video_desc, username
    from video as t0, users as t1
    where t0.user_id=t1.user_id
    Versione difficile:
    codice:
    select video_title, video_desc, username
    from video as t0 inner join users as t1
    on t0.user_id=t1.user_id

  4. #4

    Re: query due tabelle

    Originariamente inviato da stefabeta
    Ciao, è una stupida domanda di SQL (anche se all'atto pratico sto utilizzando MySQL).

    Ho due tabelle:

    video
    video_id | user_id | video_title | video_desc

    users
    user_id | username |

    Con una sola query vorrei ottenere
    video_title e video_desc dalla tabella video
    E anche username dalla tabella users
    di modo che video e users siano relazionati in qualche modo.

    Cioè, al posto dello user_id di video vorrei ottenere lo username corrispondente a quello user_id nell'altra tabella, ricevendo un risultato che contiene:
    video_title, video_desc, username

    Mi spiegate come si fa? Va bene anche una indicazione...
    devi effettuare una select join:

    SELECT v.video_title, v.video_desc, u.username
    FROM video as v
    LEFT JOIN users as u
    ON v.user_id=u.user_id;

    chiaro ?

    ciao Ginko
    Il progresso scientifico ? www.cartagodelendaest.it

  5. #5
    Grazie Debiru, quello che volevo evitare era proprio di fare 2 query! ;-)

  6. #6
    Originariamente inviato da goikiu
    Questo è un esempio

    Codice PHP:
    $query1 "SELECT user_id FROM users WHERE username LIKE $var";
    $query2 "SELECT video_title, video_desc FROM video WHERE video_id LIKE $a"
    $ris1 mysql_query($query1$db);
    $riss1 mysql_fetch_array($ris1);
    $a $riss1['user_id']
    $ris2 mysql_query($query2$db);
    $riss2 mysql_fetch_array($ris2);
    print (
    $a." ".$riss2['video_title']." ".$riss2['video_desc']); 
    No, volevo evitare le due query, forse non l'ho detto. Grazie comunque!!

  7. #7

    Re: Re: query due tabelle

    Originariamente inviato da ginko75
    devi effettuare una select join:

    SELECT v.video_title, v.video_desc, u.username
    FROM video as v
    LEFT JOIN users as u
    ON v.user_id=u.user_id;

    chiaro ?

    ciao Ginko
    Chiarissimo, grazie!

  8. #8
    Stefabeta: prego

    devi effettuare una select join:

    SELECT v.video_title, v.video_desc, u.username
    FROM video as v
    LEFT JOIN users as u
    ON v.user_id=u.user_id;

    chiaro ?

    ciao Ginko
    Attenzione che quella che hai fatto è una LEFT JOIN, potrebbero capitare dei risultati dove l'username è NULL (ammesso e concesso che vi possano essere dei video che non hanno nessun user_id o che alcuni users legati a dei video siano stati cancellati).

    Con INNER JOIN i video sprovvisti di un user correlato non verranno mostrati a video.

  9. #9
    Originariamente inviato da Debiru
    Stefabeta: prego



    Attenzione che quella che hai fatto è una LEFT JOIN, potrebbero capitare dei risultati dove l'username è NULL (ammesso e concesso che vi possano essere dei video che non hanno nessun user_id o che alcuni users legati a dei video siano stati cancellati).

    Con INNER JOIN i video sprovvisti di un user correlato non verranno mostrati a video.
    Ne approfitto per imprarae qualcosa:
    è questa l'unica differenza tra LEFT e INNER JOIN?

  10. #10
    Ti faccio due tabelle di esempio

    video
    video_id | user_id | video_title | video_desc
    01 |01 |Ciao |Prova1
    02 |10 |Salve |Prova2
    03 | |Nero |Prova3
    04 |02 |Bianco |Prova4

    users
    user_id | username
    01 |Stefabeta
    02 |Debiru
    03 |Ginko75

    Come vedi due video non hanno un user correlato, lo 02 perché non esiste un user 10, lo 03 perché ha user_id vuoto.

    Se scrivo:
    codice:
    select video_title, video_desc, username
    from video as t0 INNER join users as t1
    on t0.user_id=t1.user_id
    il vincolo di inner join pretende che il legame fra le due tabelle deve essere sempre valido, quindi questo è il risultato:

    video_title | video_desc | username
    Ciao |Prova1 |Stefabeta
    Bianco |Prova4 |Debiru

    Se scrivo invece:
    codice:
    select video_title, video_desc, username
    from video as t0 LEFT join users as t1
    on t0.user_id=t1.user_id
    sto dicendo che video (la tabella a sinistra fra le due, perchè sta a sinistra di join ), ha la precedenza, quindi innanzitutto mi mostri tutti i risultati di video, poi, se ci sono, eventuali risultati di users:

    video_title | video_desc | username
    Ciao |Prova1 |Stefabeta
    Salve |Prova2 |Null
    Nero |Prova3 |Null
    Bianco |Prova4 |Debiru

    Come vedi Salve e Nero alla casella username hanno Null, ma titolo e descrizione vengono comunque visualizzate.

    Infine, scrivendo:
    codice:
    select video_title, video_desc, username
    from video as t0 RIGHT join users as t1
    on t0.user_id=t1.user_id
    come dice da la precedenza alla tabella di destra (users) quindi vale lo stesso di prima ma riportato alla tabella users.

    video_title | video_desc | username
    Ciao |Prova1 |Stefabeta
    Bianco |Prova4 |Debiru
    Null |Null |Ginko75

    Come vedi, ci sono tutti gli utenti, anche Ginko75 che non ha viedo associati.

    Ti è piaciuta la spiegazione?

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.