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. Order by (SQL)
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • R
      raiken User Attivo • ultima modifica di

      Order by (SQL)

      Buonasera a tutti, avrei un problema che non ricordo come risolvere.

      Dovrei fare un elenco di dati presi dal db ordinandoli prima per un certo dato DESC e in caso che siano uguali per un secondo dato DESC.

      ho fatto così:

      
      $query=mysql_query("select * from tabella order by campo1 DESC, campo2 DESC");
      
      while...
      
      
      

      ma non ho ottenuto il risultato che speravo.

      Qualcuno puà aiutarmi?

      Grazie in anticipo 🙂

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
      • I
        ienavr User Attivo • ultima modifica di

        spiegati meglio...

        la query è corretta e mi sembra strano che non funzioni...

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • R
          raiken User Attivo • ultima modifica di

          Ti faccio vedere direttamente la pagina dove ho il problema

          http://www.skaweb.it/concorsi/1/classifica/

          come vedi a parità di punti dovrebbe mettermeli in ordine di tempo DESC invece sono tutti mischiati.

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • I
            ienavr User Attivo • ultima modifica di

            a parità di punti il tempo non dovrebbe essere ASC? così sta sopra chi ci ha messo meno...o sbaglio?

            ad ogni modo sarebbe ottimo se postassi direttamente il codice PHP cui fai fare la query e poi il ciclo. Perchè ti assicuro che ho provato in locale ed andava..

            oppure attendiamo pareri + illuminanti 🙂

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • R
              raiken User Attivo • ultima modifica di

              Ho messo ASC invece che DESC (non mi ero accorto di questo errore) e per la prima posizione me li mette in ordine, nelle altre me li mette DESC..

              Ecco il codice, speriamo che sia di aiuto.

              
              <?php
              
              $query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, Tempo ASC");
              
              while($row_partecipanti=mysql_fetch_array($query_partecipanti)){
              
              $posizione=++$posizione;
              
              echo"<b>$posizione</b>: $row_partecipanti[Partecipante] con <b>$row_partecipanti[Risultato]</b> punti in <b>$row_partecipanti[Tempo]</b> secondi<br />";
              
              }
              
              ?>
              
              
              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • R
                raiken User Attivo • ultima modifica di

                Ho messo ASC invece che DESC (non mi ero accorto di questo errore) e per la prima posizione me li mette in ordine, nelle altre me li mette DESC..

                Ecco il codice, speriamo che sia di aiuto.

                
                <?php
                
                $query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, Tempo ASC");
                
                while($row_partecipanti=mysql_fetch_array($query_partecipanti)){
                
                $posizione=++$posizione;
                
                echo"<b>$posizione</b>: $row_partecipanti[Partecipante] con <b>$row_partecipanti[Risultato]</b> punti in <b>$row_partecipanti[Tempo]</b> secondi<br />";
                
                }
                
                ?>
                
                
                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • C
                  cantoniere User • ultima modifica di

                  Forse è un caso, ma i tempi sono ordinati in ordine ascii (come si fa con le stringhe).
                  Nel database la colonna tempo è NUMBER o VARCHAR ?

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • R
                    raiken User Attivo • ultima modifica di

                    varchar(15)

                    perchè cambia qualcosa nell'ordine in base al tipo di campo?

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • C
                      cantoniere User • ultima modifica di

                      Sì.
                      Le stringhe vengono ordinate in ordine ascii (che coincide con l'alfabetico, i numeri vengono prima delle minuscole e poi delle maiuscole, mi pare), i numeri e le date vengono ordinati secondo l'ordine "intuitivo".
                      Comunque per risolvere il tuo problema dovresti convertire tempo in decimale.
                      Mi pare che si faccia: invece di select tempo, campo2...
                      select cast (tempo, decimal), campo 2

                      (non puoi usare l'asterisco ma elencare i campi)

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • R
                        raiken User Attivo • ultima modifica di

                        Ho letto qua sull'uso di cast:

                        http://database.html.it/guide/lezione/2453/operatori-e-funzioni-i/

                        non capisco come poter mettere all'interno di uno stesso SELECT sia il CAST che il resto degli operatori che mi servono.

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • C
                          cantoniere User • ultima modifica di

                          Prova a sostituire la riga che hai tu con questa:
                          $query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, CAST (Tempo as numeric) ASC");

                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          • R
                            raiken User Attivo • ultima modifica di

                            nulla mi da un warning

                            Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/htdocs/www.skaweb.it/home/concorso_classifica.php on line 40

                            0 Miglior Risposta Ringrazia Cita Rispondi

                              1 Risposta Ultima Risposta
                            • I
                              ienavr User Attivo • ultima modifica di

                              e con questo codice ti funziona?

                              $query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, CAST (Tempo as SIGNED) ASC");

                              0 Miglior Risposta Ringrazia Cita Rispondi

                                1 Risposta Ultima Risposta
                              • R
                                raiken User Attivo • ultima modifica di

                                sempre lo stesso errore 🙂

                                pazienza lascerò così.

                                0 Miglior Risposta Ringrazia Cita Rispondi

                                  1 Risposta Ultima Risposta
                                • I
                                  ienavr User Attivo • ultima modifica di

                                  hai provato anche a togliere lo spazio tra CAST e (Tempo?

                                  scrivendo cioè

                                  $query_partecipanti=mysql_query("select * from Concorso_Partecipante where ID_Concorso='$id_concorso' order by Risultato DESC, CAST(Tempo as SIGNED) ASC");

                                  scusa ma sì va per tentativi e credo che la sintassi di prima fosse scorretta

                                  0 Miglior Risposta Ringrazia Cita Rispondi

                                    1 Risposta Ultima Risposta
                                  • R
                                    raiken User Attivo • ultima modifica di

                                    stavolta funziona 🙂

                                    grazie mille!

                                    0 Miglior Risposta Ringrazia Cita Rispondi

                                      1 Risposta Ultima Risposta
                                    • I
                                      ienavr User Attivo • ultima modifica di

                                      prego...

                                      alla fine ce l'abbiamo fatta!

                                      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