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

    SQL + PHP: Query complessa

    Ho una tabella ("mia_tabella") con la seguente struttura e dati:
    codice:
    id | id_testa | lingua | titolo 
    1 | 1 | Italiano | Mio libro 
    2 | 1 | Inglese | My book 
    3 | 3 | Francese | Mon livre 
    4 | 3 | Portoghese | Meu livro 
    5 | 5 | Spagnolo | Mi libro
    Vorrei avere come output

    Libri in italiano
    1. Mio libro (Italiano | Inglese)

    Libri in altre lingue
    1. Mon livre (Francese | Portoghese)
    2. Mi libro (Sapgnolo)

    Per la prima lista, "Libri in italiano", non ci sono problemi, ma non riesco a tirar fuori una query che mi restituisca la seconda lista.
    La domanda è: come dev'essere questa query? :old:


    Codice PHP:
    //Query per "Libri in italiano" 
    $query_libri_italiani "SELECT DISTINCT id_testa, id, lingua, titolo FROM mia_tabella WHERE lingua = 'Italiano' ORDER BY titolo ASC";  

    //Nel While di "libri_italiani" facio un altro while con questa query, per le diferente lingue 
    $id_testa $row_libri_italiani['id_testa']; 
    $query_lingue "SELECT * FROM mia_tabella WHERE id_principal = $id_cabeza ORDER BY lingua ASC";   

    // Prova Query per "Libri non italiani" 
    $query_libri_non_italiani "SELECT * FROM mia_tabella WHERE lingua <> 'Italiano' GROUP BY 'id_testa'"

    //In questo caso nel risultato, oltre ai records 3 e 5, mi da pure il record 2, che dovrebbe rimanere fuori. 
    Luiz

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    ma la query che vuoi fare ha un criterio?????
    scusa ora ho capito

  3. #3
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    SELECT DISTINCT id_testa WHERE id_testa NOT IN (SELECT id_testa FROM mia_tabella WHERE lingua='italiano')

    con questa torvi gli id_testa dei libri non in italiano (output della query dovrebbe essere 3,5)

    una volta che hai questi dati ti tiri su le informazioni che vuoi

  4. #4
    bstefano79, grazie per l'indicazione. Effetivamente la tua query restituisci i records desiderati. Cmq con SELECT DISTINCT non ho a disposizione tutte le info del record, ma, in questo caso, solo l'id_testa. Cioè, quando stampo invece di avere, ad esempio per il record 3
    3 | 3 | Francese | Mon livre
    ho soltanto
    3
    Anche se non sono sicuro, forse una soluzione sarebbe
    Codice PHP:
    SELECT FROM _prova WHERE id_testa NOT IN (SELECT id_testa FROM _prova WHERE lingua='Italiano'GROUP BY id_testa 
    Luiz

  5. #5
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    con la query che hai scritto te il risultato sarà questo

    3 | 3 | Francese | Mon livre
    4 | 3 | Portoghese | Meu livro
    5 | 5 | Spagnolo | Mi libro


    poi devi pensare a dividere il risultato per id_testa

  6. #6
    bstefano, con GROUP BY id_testa che ho messo nella query mi stampa soltanto

    3 | 3 | Francese | Mon livre
    5 | 5 | Spagnolo | Mi libro

    Così va bene.
    Poi, con do ... while per il pubblico mostro qualcosa come
    Mon libre (Francese | Spagnolo)
    Mi libro (Spagnolo)
    Luiz

  7. #7
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Originariamente inviato da ldarosa
    bstefano, con GROUP BY id_testa che ho messo nella query mi stampa soltanto

    3 | 3 | Francese | Mon livre
    5 | 5 | Spagnolo | Mi libro

    Così va bene.
    Poi, con do ... while per il pubblico mostro qualcosa come
    Mon libre (Francese | Spagnolo)
    Mi libro (Spagnolo)
    ma non dovrebbe essere Mon libre (Francese | Portoghese) invece di Mon libre (Francese | Spagnolo) ?

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.