Visualizzazione dei risultati da 1 a 6 su 6

Discussione: problemi con RAND

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    2,043

    problemi con RAND

    ciao a tutti,
    ho un problema con una query, se alla query gli chiedo di tirar fuori solo 20 record qualsiasi in modo randomico, funziona:

    Codice PHP:
       $range date ("Y-m-d"mktime(0,0,0,date("m"),date("d")-30,date("Y")));  
       
                
    $query_15="SELECT c_art_articolo.*, c_art_categoria.*  
                
                FROM c_art_articolo
                
                INNER JOIN c_art_categoria
                ON c_art_articolo.id_art_categoria = c_art_categoria.id_art_categoria 
                
                WHERE c_art_articolo.data_ins_adm >= '
    $range
                
                ORDER BY RAND() LIMIT 20"
    ;
                
    $mysql_query_15=mysql_query($query_15$conn); 
    se invece voglio tirar fuori un elenco dove voglio selezionare in modo randomico SOLO i 20 che hanno il numero di "contatore" più alto (c_art_articolo.contatore DESC) non mi esce niente.

    Codice PHP:
      $range date ("Y-m-d"mktime(0,0,0,date("m"),date("d")-30,date("Y")));  
       
                
    $query_15="SELECT c_art_articolo.*, c_art_categoria.*  
                
                FROM c_art_articolo
                
                INNER JOIN c_art_categoria
                ON c_art_articolo.id_art_categoria = c_art_categoria.id_art_categoria 
                
                WHERE c_art_articolo.data_ins_adm >= '
    $range
                
                ORDER BY RAND() LIMIT 20, c_art_articolo.contatore DESC"
    ;
                
    $mysql_query_15=mysql_query($query_15$conn); 

  2. #2
    Prova così:
    Codice PHP:
    ... ORDER BY RAND(), c_art_articolo.contatore DESC LIMIT 20"; 

  3. #3
    Una volta che l'ordinamento e' casuale... l'ordinamento e' casuale. Tu devi PRIMA estrarre i 20 record col valore piu' alto e poi mescolarli.

    codice:
    SELECT * FROM (
            SELECT c_art_articolo.*, c_art_categoria.*  
              FROM c_art_articolo
        INNER JOIN c_art_categoria
                ON c_art_articolo.id_art_categoria = c_art_categoria.id_art_categoria 
             WHERE c_art_articolo.data_ins_adm >= '$range' 
          ORDER BY c_art_articolo.contatore DESC
             LIMIT 20
    ) top20 ORDER BY RAND()
    query scritta al volo non testata

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    2,043
    Grazie k.b
    solo una cosa che non capisco:

    top20

    a che serve?

  5. #5
    Facendo le subquery e' necessario dare un'alias alla SELECT interna, e' richiesto dalla sintassi anche se poi non lo usi.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    2,043
    Ottimo, ho imparato una cosa nuova
    grazie ancora

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 © 2024 vBulletin Solutions, Inc. All rights reserved.