Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Categorie
    3. Coding e Sistemistica
    4. Coding
    5. Query verifica tutti
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • C
      calabria Super User • ultima modifica di

      Query verifica tutti

      Ciao Ragazzi
      con questa base di dati:

      Birra(codBir, nome, marca),
      Piace(codBev, codBir)

      Come formulo una query che restituisce le birre che piacciono a TUTTI i Bevitori (codBev)?

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
      • P
        portapipe User Attivo • ultima modifica di

        ??

        Vuoi una query che selezioni tutti i campi con codBev pieno? Che si riferisca ad una birra? Non ho capito...

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • C
          calabria Super User • ultima modifica di

          Ciao portapipe
          voglio una query che restituisce il codice delle birre (codBirre) che piacciano a tutti i bevitori (codBev)

          Esempio
          birra(1,Light,Moretti)
          birra(2,Light,Tuborg)

          piace(1,1)
          piace(2,2)
          piace(2,1)

          In questo esempio il codice da restituire è 1 perchè la birra 1 piace sia al bevitore 1 che al bevitore 2 quindi a TUTTI i bevitori

          Spero di essere stato chiaro

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • P
            portapipe User Attivo • ultima modifica di

            Non ho capito la storia dei bevitori.
            piace(1,1)
            piace(2,2)
            piace(2,1)
            cosa significano rispettivamente?

            dai che ci arriviamo! 🙂

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • C
              calabria Super User • ultima modifica di

              piace (1,1) vuol dire che al bevitore con codice 1, piace la birra con codice 1 ecc...

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • P
                portapipe User Attivo • ultima modifica di

                Ok.
                Puoi creare una query per l'estrazione delle birre ed una per il numero di utenti

                SELECT * FROM birre
                SELECT * FROM utenti

                $numutenti=mysql_num_row($queryutenti);

                //Poi crei l'array delle birre
                while($array=mysql_fetch_array($querybirre)){

                //e dentro ci metti una seconda query per estrarre il numero di utenti a cui piace la birra che gira nel ciclo while in quel momento
                SELECT * FROM piace WHERE codBir='$array['codBir']
                $numpiace=mysql_num_rows($querypiace);

                //e qui ti crei una condizione per la quale se il numero di record dell'ultima query è inferiore a quella degli utenti, non si vede nulla
                if($numpiace==$numutenti){

                //visualizza le birre
                }

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • C
                  calabria Super User • ultima modifica di

                  Grazie per il tempo Portapipe ma purtroppo non posso utilizzare nessun linguaggio di programmazione.

                  Devo fare una query in sql che restituisca il risultato senza alcuna implementazione in nessun linguaggio.

                  Io credo di dover fare un Join tra le tabelle piace e birre e all'interno delle birre utilizzare un Alias per confrontare che il codice di birra sia lo stesso ma che il codBev sia diverso ma non mi arriva la capa 😉

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • P
                    portapipe User Attivo • ultima modifica di

                    Specificarlo prima? :dull:

                    Devi farti una query con JOIN ma non puoi calcolare tutto da una singola query. Anche solo per calcolare il numero di record hai bisogno di una funzione esterna.
                    Va bene accorciare il tutto ma ci sono dei limiti 😉

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • C
                      calabria Super User • ultima modifica di

                      @portapipe said:

                      Specificarlo prima? :dull:

                      Ho detto di dover fare una query nel primo post credevo fosse chiaro :rollo:

                      Comunque credo di aver risolto così
                      SELECT codBirra FROM birra
                      WHERE codBirra = ALL (SELECT codBirra FROM piace);

                      Ora controllo meglio ma sembra restituire il giusto

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • P
                        portapipe User Attivo • ultima modifica di

                        :surprised:
                        Esiste un ALL () ?
                        Vedi, il bello del forum è imparare.. 🙂

                        Comunque dire che devi fare una query o che puoi fare soltanto una query è differente 😉

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • C
                          calabria Super User • ultima modifica di

                          Si esiste ALL senza parentesi perchè non è una funzione; le parentesi racchiudono una subquery.

                          Ciao a grazie per l'interessamento

                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          • C
                            calabria Super User • ultima modifica di

                            Correggo:

                            SELECT codBirra FROM birra
                            WHERE codBirra = ALL (SELECT p1.codBirra FROM piace AS p1, piace AS p2
                            WHERE p1.codBev <> p2.codBev
                            AND p1.codBirra = p2.codBirra);

                            Prima verificava se la birra piaceva a tutti ma nessun bevitore piaceva un altra birra 😉

                            Ora è ok

                            0 Miglior Risposta Ringrazia Cita Rispondi

                              1 Risposta Ultima Risposta
                            • T
                              thedarkita ModSenior • ultima modifica di

                              Ciao Calabria,

                              sei sicuro che in quel modo funzioni?
                              Da quello che sò io, non dovrebbe comportarsi come chiedevi tu, infatti ho fatto una prova cosi:
                              In birra ho messo:

                              • birra 1
                              • birra 2
                                Tabella piace:
                              • utente 1 birra 1
                              • utente 2 birra 1
                              • utente 2 birra 2

                              In questo caso a tutti gli utenti piace la birra 1, ma con quella query non funziona perchè è sufficiente che ad un utente piaccia una birra diversa perchè non restituisca nulla.

                              EDIT: Sono arrivato tardi :), ma anche questa query mi sembra non vada bene se infatti provi con questi dati:
                              In birra:

                              • birra 1
                              • birra 2
                                piace:
                              • utente 1 birra 1
                              • utente 2 birra 1
                              • utente 2 birra 2
                              • utente 1 birra 2

                              Mi sembra dia risultati inaspettati

                              0 Miglior Risposta Ringrazia Cita Rispondi

                                1 Risposta Ultima Risposta
                              Caricamento altri post
                              Rispondi
                              • Topic risposta
                              Effettua l'accesso per rispondere
                              • Da Vecchi a Nuovi
                              • Da Nuovi a Vecchi
                              • Più Voti