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. Selezionare campo random da tabella mysql
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • C
      ceorge User • 19 dic 2010, 14:43 ultima modifica di

      Selezionare campo random da tabella mysql

      Salve a tutti 🙂

      Vorrei riuscire a selezionare un campo random in una tabella mysql..

      (sto scrivendo una funzione)

      
      function core() {
      include('conn.php'); //dati collegamento db
      
      $select = 'SELECT user FROM pool WHERE actual != max'; 
      
      //vorrei mettere i campi risultanti in un array e poi usare la funzione php //shuffle e poi fare echo $nome_array[0]; x ricavare un utente random.
      }
      
      

      Sapreste aiutarmi?

      Grazie in anticipo.

      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
         

      • T
        thedarkita ModSenior • 19 dic 2010, 15:21 ultima modifica di

        Ciao ceorge,
        ma devi ricavare un campo o un utente? Sono 2 cose molto differenti.

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • C
          ceorge User • 19 dic 2010, 15:29 ultima modifica di

          Il nome di un utente:) grazie per la pronta risposta!

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • T
            thedarkita ModSenior • 19 dic 2010, 15:31 ultima modifica di

            Puoi fare ORDER BY rand() LIMIT 1 direttamente nella query.

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • C
              ceorge User • 19 dic 2010, 15:33 ultima modifica di

              È ciò che sto già usando...
              Però se la tabella ha dimensioni molto grandi 10000+ campi risulta un metodo molto lento.... perciò vorrei affidarmi al php. 😄

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • T
                thedarkita ModSenior • 19 dic 2010, 15:35 ultima modifica di

                Fai attenzione alle maiuscole e a non utilizzare lo stile sms nei tuoi messaggi...
                Per quanto riguarda il problema, una query di quel tipo su 10000 record(Non campi :D)non è nulla di così complesso, farlo in php semmai è un suicidio perchè dovresti fare una query enorme e poi usare pure php.

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • C
                  ceorge User • 19 dic 2010, 15:38 ultima modifica di

                  Ok, grazie 😄

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • H
                    html5today User Attivo • 22 dic 2010, 11:26 ultima modifica di

                    Se la tua query è molto lenta potrebbe esserci spazio per ottimizzare la tabella (ad esempio aggiungendo un indice) o direttamente il vincolo LIMIT.

                    Parti da qui per leggere qualcosa in proposito:
                    h t t p : //dev.mysql.com/doc/refman/5.0/en/limit-optimization.html
                    h t t p ://dev.mysql.com/doc/refman/5.0/en/explain.html

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • R
                      rapide User • 10 gen 2018, 10:32 ultima modifica di

                      Buongiorno a tutti,
                      so che la discussione è molto vecchia, ma spero qualcuno possa comunque rispondere.
                      Il mio problema è "complesso" ma proverò a snocciolarlo per punti. Il fulcro della questione è la possibilità di selezionare 5 valori su 10 in modalità random con un unico vincolo ovvero la somma dei primi 5 valori selezionati deve essere più simile possibile alla somma dei restanti 5 valori (o alla metà della somma totale dei 10 valori iniziali).

                      Non sono sicuro che sia chiara la questione. Siccome non so neanche da che parte cominciare e sono decisamente un programmatore php amatoriale, sapreste almeno indirizzarmi da qualche parte? Conviene farlo con PHP o conviene elaborare questi dati in altro modo?

                      Grazie mille

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • G
                        gigi991 User Attivo • 11 gen 2018, 21:18 ultima modifica di

                        La butto lì:

                        1. Prima sommi tutti i valori per ottenere il totale, e calcoli la metà.
                          Esempio hai somma 100 per 10 persone.

                        2. Poi prendi 5 random, se il valore di questi è diverso per più o meno l'X % (che decidi tu) rispetto al pari perfetto:
                          3a. - se sei sopra, di questi 5 prendi il maggiore, calcola quanti punti dovresti perdere per avvicinarti al pari perfetto, e rifai una query sui 5 restanti mettendo come condizione che devono avere un valore inferiore (e max = al valore che ti serve per arrivare al pareggio). Poi ripeti il check al punto 2.
                          3b. - se sei sotto, di questi 5 prendi il minore, calcola quanti punti dovresti aumentare per avvicinarti al pari perfetto, e rifai una query sui 5 restanti mettendo come condizione che devono avere un valore maggiore (e max = al valore che ti serve per arrivare al pareggio). Poi ripeti il check al punto 2.

                        Ripeti il 3 (a o b) finché non ti avvicini al pareggio. Questo permette di ribaltare anche situazioni molto impari tipo 80-20. Col primo ciclo magari vai a 66-34, col secondo 60-40, col terzo 58-42, col quarto 53-47 (e se rientra nella percentuale, es 5%, ti fermi).

                        Terminato il ciclo dovresti avere una situazione più o meno alla pari.

                        Metodo 2:

                        1. Prima sommi tutti i valori per ottenere il totale e dividi per 10 (valore medio)
                        2. Selezioni solo 1 random alla volta: se il valore totale dei selezionati (al primo giro è uno) è > di valore_medio * X (dove X = numero selezionati fino a quel momento), quello successivo lo prendi random con la condizione che deve avere un valore inferiore del valore medio. Viceversa se è < ne peschi uno con valore >. E ti fermi alla selezione 5.
                          Personalmente preferisco questa, senza provare a mettere giù del codice mi sembra più semplice.

                        Chiaramente lavora il tutto in php (es. array), non fare una query alla volta al db.

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • R
                          rapide User • 13 gen 2018, 16:52 ultima modifica di

                          Ciao Gigi991,
                          Grazie mille per la risposta rapida e precisa. Entrambi i metodi mi sembrano praticabili e funzionanti. Convengo con te che il secondo a naso sembra meno impegnativo a livello di codice. Proverò a scrivere il codice e spero di venirne a capo!

                          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