Query mysql per selezioni random in categorie mirate

Marco Vitaletti

Nuovo Utente
11 Apr 2013
5
0
0
Salve a tutti,
sto cercando di estrarre da un database alcuni record in maniera casuale ma andando a pescarli secondo un certo criterio.
ho una tabella con una colonna contenuti e una capitoli, vorrei estrarre ad esempio due record casuali per il capitolo 1, tre per il capitolo 2 otto per il capitolo 3 ecc

| id | capitoli |
----------------
1 1
----------------
2 1
----------------
3 1
----------------
4 2
----------------
5 2
----------------
6 2
----------------
7 3
----------------
8 4
----------------
9 4
----------------
10 4
----------------
ecc..
----------------

I record sono 1000 e i capitoli 7, al momento non riuscendo a trovare altro modo sto eseguendo 7 query, una per capitolo, sicuramente questo non e' il massimo della pulizia e funzionalità.
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
ciao, oltre all'esempio se avessi postato le query, potevi aiutare noi a capire meglio,
così l'unico suggerimento, è di usare "UNION" per avere una sola query
 

Marco Vitaletti

Nuovo Utente
11 Apr 2013
5
0
0
Si hai perfettamente ragione, posto sotto un esempio

"SELECT * FROM tabella WHERE tipologia = 1 AND capitoli IN (1,2,3,4,5,6,7) ORDER BY RAND() LIMIT 20"

questa diciamo che e' la query di partenza quello che in pratica avrei bisogno di fare sarebbe questo:

"SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 1 ORDER BY RAND() LIMIT 2"
"SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 2 ORDER BY RAND() LIMIT 1"
"SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 3 ORDER BY RAND() LIMIT 5"
"SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 4 ORDER BY RAND() LIMIT 3"
"SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 5 ORDER BY RAND() LIMIT 2"
"SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 6 ORDER BY RAND() LIMIT 4"
"SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 7 ORDER BY RAND() LIMIT 3"
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
salvo smentite, non credo ci sia una soluzione migliore perché "order by" ma soprattutto "limit" sono legati alla singola "select"
se vuoi avere un singolo risultato, puoi usare "union", ovvero,
Codice:
$sql="
(SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 1 ORDER BY RAND() LIMIT 2) UNION
(SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 2 ORDER BY RAND() LIMIT 1) UNION
.....
(SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 7 ORDER BY RAND() LIMIT 3)
";
al limite creando la query in modo dinamico, se necessario
 

Marco Vitaletti

Nuovo Utente
11 Apr 2013
5
0
0
salvo smentite, non credo ci sia una soluzione migliore perché "order by" ma soprattutto "limit" sono legati alla singola "select"
se vuoi avere un singolo risultato, puoi usare "union", ovvero,
Codice:
$sql="
(SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 1 ORDER BY RAND() LIMIT 2) UNION
(SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 2 ORDER BY RAND() LIMIT 1) UNION
.....
(SELECT * FROM tabella WHERE tipologia = 1 AND capitoli = 7 ORDER BY RAND() LIMIT 3)
";
al limite creando la query in modo dinamico, se necessario

Ok, mi sembra una soluzione accettabile dato che il numero delle query e' fisso a 7, e che comunque creandole in modo dinamico sono gestibili abbastanza semplicemente

Provo subito, grazie
 
Discussioni simili
Autore Titolo Forum Risposte Data
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
R Aiutino per query MySql PHP 8
P Query Mysql per inserimento multiplo MySQL 4
F aiuto per query UNIONE mysql MySQL 2
A Carattere 'è' in query MySQL PHP 0
M [MySQL] CREARE UN LINK SU UN DETERMINATO CAMPO DI UNA TABELLA RISULTATO DI UNA QUERY SQL MySQL 3
max1974 Query lenta.....Mysql 5.7 MySQL 2
G [MySQL] Connessione DB e query da file batch MySQL 1
V [MySQL] problema query con date su server MySQL 5
P Query Mysql con Join PHP 2
D [MySQL] Tabelle "molti a molti", SELECT con troppe QUERY MySQL 7
G esportare in file .csv risultato di query mysql PHP 5
napuleone [MySQL] commenti in una query MySQL 1
P [MySQL] Query su DB 1 e Insert su DB 2 PHP 11
MarcoGrazia [mysql][mariadb]Raggruppare query in base alla data MySQL 2
G Mysql ( Query) problema interrogazione MySQL 0
danjde [MySQL] Escludere specifico valore dalla query select MySQL 3
C Php/Mysql query JOIN tra tabelle PHP 4
C Php/Mysql query JOIN tra due tabelle PHP 18
P [MYSQL] Query su tabelle con clausola "essenziale" MySQL 10
booklisa MYSQL e PHP Query e sottoquery PHP 3
A Query mssql su mysql con linked server Database 0
I Query DB MYSQL MySQL 0
T query mysql MySQL 3
gandalf1959 mysql query, sum(qualcosa), order by sum(qualcosa). E' possibile? PHP 14
M [PHP - MYSQL] Mantenere filtro query in tabelle paginate PHP 3
M Paginazione di risultati query mysql PHP 2
G problema query mysql in php PHP 5
felino [PHP][MySQL] Errore nella query PHP 6
A Form fattura multiriga e query salvataggio mysql PHP 3
N Eseguire una query MySQL dopo 10 secondi PHP 0
A jbutton che esegue una query mysql in netbeans Java 1
IImanuII mysql query random riga PHP 5
G Inserimento loop in una INSERT query in PHP e MySQL PHP 2
L filtri di query [php-mysql] PHP 6
A [RISOLTO]Come generare query dinamica PHP-MYSQL PHP 2
Albertoesse Problemi passaggio valori da un Form ad Una classe con query mysql PHP 12
G Problema con query mysql MySQL 1
B problema query mysql php PHP 1
L PHP: problema con query mysql. PHP 3
M MySql Query ciclo nidificato PHP 3
ivarello Asterisco e query mysql PHP 2
A Indicizzare i risultati di una query Mysql con php PHP 0
F Estrazione da db MySQL con query molto lunga PHP 13
B Aiuto query mysql in php PHP 1
S Autocompletamente con jQuery, PHP e MySQL - Problema con le query PHP 7
M cache query mysql PHP 1
Boscagoo Problema query mySQL MySQL 6
A sintassi query mysql PHP 3
R Quale la funzione mysql query. PHP 3

Discussioni simili