Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538

    Query abbastanza complicata

    ho due tabelle.
    Una si chiama squadre:

    codice:
    +----+--------------------------------------------------+
    | id | nome                                             |
    +----+--------------------------------------------------+
    |  1 | Jurmala                                          |
    |  2 | Artus Maddalonese                                |
    |  3 | Grottaglie                                       |
    |  4 | Centro Minibasket Città di Caserta               |
    |  5 | Action Now!                                      |
    |  6 | Real Basket                                      |
    |  7 | Mini&Basket Caserta                              |
    |  8 | Viver Basket                                     |
    +----+--------------------------------------------------+
    L altra è 'partite' :

    codice:
    +----+----------+----------+
    | id | squadraA | squadrab |
    +----+----------+----------+
    |  1 | 3        | 2        |
    |  2 | 4        | 1        |
    |  3 | 7        | 6        |
    |  4 | 5        | 8        |
    |  5 | 1        | 3        |
    |  6 | 2        | 4        |
    |  7 | 5        | 7        |
    |  8 | 8        | 6        |
    +----+----------+----------+
    i numeri nelle colonne squadraA e squadraB rappresentano gli id delle squadre che disputano questa partita

    Vorrei, cn un unica query, selezionare tutte le partite, ottenendo i nomi, contenuti in 'squadre', delle squadre che giocano la partita.

    finora ci ho provato, ma l 'unico risultato è stato quello di riuscire a selezionare o il nome della squadra a o il nome della squadra b, ma nn insieme!

    SELECT partite.numero_partita, squadre.nome AS SquadraA FROM squadre,partite WHERE squadre.id = SquadraA;

    in questa query nn riesco a inserire anche squadraB!

    help me!

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    prova cosi (nn l'ho testata):
    codice:
    SELECT s1.nome, s2.nome FROM partite AS p
    INNER JOIN squadre AS s1 ON s1.id = p.squadraA
    INNER JOIN squadre AS s2 ON s2.id = p.squadraB
    WHERE p.id = 1

    think simple think ringo

  3. #3
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    ma scusa perchè scrivi s1.nome, s2.nome? la tabella delle squadre è solo una!

  4. #4
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    ah ho capito, nn avevo visto gli alias successivi.
    mo provo e ti dico

  5. #5
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    funziona, GRAZIE MILLE!

  6. #6
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    ora avrei un altro problema, mi sembra più complicato

    ho modificato la tabella squadre cosi:

    codice:
    +----+-----------+------------------------------------------+
    | id | id_girone | nome                                     |
    +----+-----------+------------------------------------------+
    |  1 |         1 | Jurmala                                  |
    |  2 |         1 | Artus Maddalonese                        |
    |  3 |         1 | Grottaglie                               |
    |  4 |         1 | Centro Minibasket CittÓ di Caserta       |
    |  5 |         2 | Action Now!                              |
    |  6 |         2 | Real Basket                              |
    |  7 |         2 | Mini&Basket Caserta                      |
    |  8 |         2 | Viver Basket                             |
    +----+-----------+------------------------------------------+
    la tabella partite invece rimane cosi:

    codice:
    +----+----------+----------+
    | id | squadraA | squadraB |
    +----+----------+----------+
    |  1 | 3        | 2        |
    |  2 | 4        | 1        |
    |  3 | 7        | 6        |
    |  4 | 5        | 8        |
    |  5 | 1        | 3        |
    |  6 | 2        | 4        |
    |  7 | 5        | 7        |
    |  8 | 8        | 6        |
    +----+----------+----------+
    in questo modo, ogni squadra appartiene a un girone.

    Se voglio selezionare tutte le squadre del girone 1, faccio:

    SELECT * FROM squadre WHERE id_girone = 1

    Ora però vorrei selezionare, oltre al nome di una squadra, anche il numero di partite giocate. In pratica dovrei ricavare il numero di righe in cui l'id della squadra compare o in partite.squadraA o in partite SquadraB, e con la stessa query selezionare anche il nome della squadra prelevandolo da squadre. sono stato chiaro?

    qualcuno ha qualche idea? io ci sto provando, ma senza successo!

  7. #7
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    Fatto! Funziona!

    Che ne pensate, è strutturata bene la query o poteva andare meglio?

    codice:
    SELECT squadre.nome, count(partite.id) AS PartiteGiocate
    
    FROM 
    (squadre INNER JOIN partite ON squadre.id = partite.squadraA  OR squadre.id = partite.squadraB) 
    
    WHERE squadre.id_girone = 1 
    
    GROUP BY (squadre.nome)

  8. #8
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    mmm ora però ho trovato un problema: se una squadra nn ha giocato nemmeno una partita, il suo nome nn appare nell elenco!

    io invece vorrei che apparisse!

    in altre parole, come si fa a indicare che i records della tabella 'squadre' devono apparire sempre e comunque, anche se nn trovano riscontri in 'partite'?

  9. #9
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    risolto anche questo!

    codice:
    SELECT squadre.nome, count(partite.id) AS PartiteGiocate
    
    FROM 
    (squadre LEFT JOIN partite ON squadre.id = partite.squadraA  OR squadre.id = partite.squadraB) 
    
    WHERE squadre.id_girone = 1 
    
    GROUP BY (squadre.nome)

  10. #10
    Originariamente inviato da marketto
    codice:
    SELECT s1.nome, s2.nome FROM partite AS p
    INNER JOIN squadre AS s1 ON s1.id = p.squadraA
    INNER JOIN squadre AS s2 ON s2.id = p.squadraB
    WHERE p.id = 1
    Scusate continuo questa discussione perchè mi sono imbattuto in un problema praticamente identico.

    Per capire meglio gli alias ho preso proprio questa query e l'ho eseguita, ma come risultato ho un array così composto.

    codice:
    Array
    (
        [0] => Grottaglie
        [nome] => Artus Maddalonese
        [1] => Artus Maddalonese
    )
    Domanda.... è normale che sia composto così?
    Non c'è modo di scrivere nell'array associativo che il valore della prima squadra venga inserito qui?

    - $var[nome1][valore1]

    e che il valore della seconda squadra in

    - $var[nome2][valore2]

    cioè ... una specie di alias per i valori stessi e non solo per le tabelle.
    Aiuto?

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.