Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508

    Doppia join con potenziali id di riferimento vuoti

    Ho 3 tabelle strutturate così
    codice:
    EVENTS
    -------------------------------------------------------------
    | id | user_id | category | subcategory | created_at | .... |
    |-----------------------------------------------------------|
    |  1 |    1    |    1     |      1      | 2015-05-10 | .... |
    |  2 |    1    |    2     |      3      | 2015-05-12 | .... |
    |  3 |    1    |    3     |             | 2015-05-15 | .... |
    |  4 |    1    |    1     |      1      | 2015-05-17 | .... |
    -------------------------------------------------------------
    
    CATEGORIES          SUBCATEGORIES
    ---------------     ---------------
    | id |  name  |     | id |  name  |
    |----|--------|     |----|--------|
    |  1 | sport  |     |  1 | calcio |
    |  2 | musica |     |  2 | basket |
    |  3 | mostre |     |  3 |  rock  |
    ---------------     ---------------
    Il mio intento è quello di restituire con una query tutti gli eventi associati ad un dato utente, in cui però invece degli id delle categorie e sottocategorie ci siano i rispettivi nomi.

    Lo faccio in questo modo:

    codice:
    select events.id as id, 
           events.title as title,
           events.created_at as created_at,
           categories.name as category,
           subcategories.name as subcategory
    from events 
    inner join categories on events.category = categories.id 
    inner join subcategories on events.subcategory = subcategories.id 
    where events.user_id = 1
    Tutto questo funziona per gli eventi con id 1, 2 e 4, ma ovviamente non per il 3, il quale non ha un id per la sottocategoria, che purtroppo è opzionale, quindi recupero 3 eventi invece di 4.

    Come posso fare per recuperare tutti gli eventi ed avere correttamente associati i nomi di categorie e sottocategorie?
    Ultima modifica di Alhazred; 17-05-2015 a 18:40

  2. #2
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Non è che abbia capito benissimo quale sia il problema, ma usando inner join (che è poi join e basta) forzi l'esistenza delle chiavi (come un where =).
    Left join

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Grazie.

  4. #4
    se è previsto che una categoria possa non avere sottocategorie --> inner join tra eventi e categorie, left join tra categorie e sottocategorie

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.