Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Un contatore in base a percentuale

    Non so come risolvere la seguente necesistà,

    dato un Array di 10.000 numeri telefonici es:
    codice:
    $aTelephonNumbers = mysql_fetch_array(mysql_query("SELECT Numero FROM numeri_telefonici ORDER BY Numero ASC;", $link));
    vorrei fare una stampa a video di un certo numero di essi, impostando in percentuale quanti, es:

    voglio stamparne il 10%,

    quindi setto a 10 la mia variabile e lui mi deve restituire il 10% dei numeri presenti nell'Array ma in maniera RANDOM.

    come potrei fare ???

  2. #2
    Per prima cosa ti suggerisco di leggere la pagina del manuale ufficiale relativa alla funzione http://www.php.net/mysql_fetch_array perchè ho l'impressione tu non abbia capito come utilizzarla correttamente.

    Per quanto riguarda l'estrazione di un numero random di valori da un array è sufficiente utilizzare le seguenti funzioni:

    http://www.php.net/shuffle
    http://www.php.net/count
    http://www.php.net/array_slice

    ed un po' di matematica da elementari (es. totale valori * %).

  3. #3
    Originariamente inviato da filippo.toso
    Per prima cosa ti suggerisco di leggere la pagina del manuale ufficiale relativa alla funzione http://www.php.net/mysql_fetch_array perchè ho l'impressione tu non abbia capito come utilizzarla correttamente.
    non ti capisco, cosa vuoi dire ?

  4. #4
    potresti provare un altra soluzione, usando solo 2 query, senza andare a lavorare direttamente sull'array però non so qual'è la più performante tra le due

    fai una prima query con un count, qualcosa tipo
    SELECT COUNT(*) FROM tabella

    dopo di che ti calcoli il 10% di quel valore restituito, quindi
    $records_da_estrarre = ($percentuale / 100) * $count_query;

    e poi fai
    SELECT * FROM tabella LIMIT $records_da_estrarre ORDER BY RAND()

    però provala, non ricordo se ci sono risultati strani accoppiando rand e limit
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Originariamente inviato da daniele_dll
    potresti provare un altra soluzione, usando solo 2 query, senza andare a lavorare direttamente sull'array però non so qual'è la più performante tra le due

    fai una prima query con un count, qualcosa tipo
    SELECT COUNT(*) FROM tabella

    dopo di che ti calcoli il 10% di quel valore restituito, quindi
    $records_da_estrarre = ($percentuale / 100) * $count_query;

    e poi fai
    SELECT * FROM tabella LIMIT $records_da_estrarre ORDER BY RAND()

    però provala, non ricordo se ci sono risultati strani accoppiando rand e limit
    solo una piccola distrazione:
    SELECT * FROM tabella ORDER BY RAND() LIMIT $records_da_estrarre;

    ma per il resto e' perfetta, grazie mille !!!

  6. #6
    Originariamente inviato da w_t
    solo una piccola distrazione:
    SELECT * FROM tabella ORDER BY RAND() LIMIT $records_da_estrarre;

    ma per il resto e' perfetta, grazie mille !!!
    pardon, te l'ho postata mentre giocavo a corum

    l'unico svantaggio di un approccio del genere e che non hai a disposizione la cache di mysql, per questo ti dicevo che non so se è più performante il lavoro di array o questo, anche se c'è da considerare che dovresti fare 10 mila cicli per estrarre i valori casuali che ti servono (usando rand dentro il ciclo per esempio)
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    be.., no ..., 10.000 era un esempio, io lavoro all'incirca con 50/300 record per volta, dato che ogni minuto richiamo lo script.

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.