prendere 2 risultati casuali da database

loreberti10

Utente Attivo
22 Set 2012
43
0
0
ciao a tutti, ho un piccolo problema, supponete di avere come risultato di una query una cosa di questo tipo

Codice:
id_test Domanda sezione brano SottoSezione
1             2             1                 Geografia
id_test Domanda sezione brano SottoSezione
2             2             1                 Geografia
id_test Domanda sezione brano SottoSezione
3             2             1                 Geografia
id_test Domanda sezione brano SottoSezione
4             2             1                Letteratura
id_test Domanda sezione brano SottoSezione
5             2             1                 Letteratura
id_test Domanda sezione brano SottoSezione
6             2             1                Letteratura
id_test Domanda sezione brano SottoSezione
7             2             1                 Letteratura
id_test Domanda sezione brano SottoSezione
8             2             1                Letteratura
Ora quello che io vorrei cercare di fare è avere tramite Sql e PHP un risultato con un random degli id test ma che mi prenda solo 2 sottosezioni di ognuna.
Cioè ad esempio :
Codice:
id_test Domanda sezione brano SottoSezione
1             2             1                 Geografia
id_test Domanda sezione brano SottoSezione
3             2             1                 Geografia
id_test Domanda sezione brano SottoSezione
6             2             1                Letteratura
id_test Domanda sezione brano SottoSezione
8             2             1                Letteratura

è possibile farlo? cioè alla fine il gioco sarebbe solo rendere gli id test random ma prenderne solo 2 per ogni sottosezione..
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
il problema sarebbe abbastanza semplice se tu fossi sicuro che gli id siano SEMPRE in sequenza, ma se es. cancelli un record l'id manca.
per cui per estrarre casualmente degli id devi priva vedere quali id esistono
PHP:
<?php
//dati di connessione
$id_casuali=array();
$q_1=mysql_query("SELECT sottocategoria FROM tabella GROUP BY sottocategoria ORDER BY sottocategoria");
while($r_1=mysql_fetch_array($q_1)){
	$sotto=$r_1['sottocategoria'];
	$q_2=mysql_query("SELECT id FROM tabella WHERE sottocategoria='$sotto'");
	while($r_2=mysql_fetch_array($q_2)){//estraggo gli id appartenenti alla sottocategoria
		$id_casuali[$sotto][]=$r_2['id'];//creo un array di array che poi randomizzerò
	}
}
foreach($id_casuali as $chiave => $valore){
	shuffle($id_casuali[$chiave]);//randomizzo gli id della categoria
	for($k=0; $k <= 1; $k++){//e estraggo i primi due che sono casuali
		$q_3=mysql_query("SELECT * FROM tabella WHERE id=".$id_casuali[$chiave][$k]);
		if($q_3){//trovato
			$r_3=mysql_fetch_array($q_3);
			echo "id ".$r_3['id']." - domanda ".$r_3['domanda']." brano ".$r_3['brano']." sotto categoria ".$r_3['sottocategoria']."<br>";
		}else{
			echo "non ci sono record<br>";
		}
	}
}
?>
prova, al massimo non funziona
p.s.
guarda che ho messo nome tabella e dei campi a caso, devi metterci i tuoi
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
Grazie della risposta, in realtà la mia situazione è leggermente più complicata,
In pratica io ho le domande suddivise in sezioni e sottosezioni e mi vengono poste una alla volta.
ora io quello che ad esempio ho fatto sotto è prendere i test della sezione 2, solo che io devo prendere esclusivamente i test che un utente non ha fatto, i test sono ordinati in ogni sezione.
ogni sezione è identificata da un intero, io quello che vorrei fare è dare dei tag a delle domande in maniera che vengano presi due record per sottosezioni, di una sezione particolare che in questo caso è la numero 2

Codice:
if ($database==FALSE) {
      echo "Errore nella connessione al DB: " . mysql_error();
   } else {
	
	$nick = $_SESSION['nome'];
	
	
		
$queryControllo = 
		("
		SELECT id_test, Test_Question, Sezione  
		FROM Admin
		WHERE Admin.Sezione = '2'
		
		EXCEPT
		
		SELECT id_test, Test_Question, Sezione
		FROM Admin JOIN RispostaUtente
		WHERE id_test = id_testUtente AND RispostaUtente.NickNameRisposta = '".$nick."' AND SezioneRisposte = '2'
		
		
		
		order by id_test ASC
	

		
		");
		$risultatoControllo=sqlite_query($database,$queryControllo);
$x=0;	
 	$contenutiControllo=sqlite_fetch_array($risultatoControllo);
 $idTest = $contenutiControllo['id_test'];
 $Question = $contenutiControllo['Test_Question'];
 $Sezione = $contenutiControllo['Sezione'];

quello che dovrei fare se riesco è prendere 2 domande per sottosezione, cioè forse per come ho fatto io non è possibile..ammetto che non sono stato proprio un genio nel fare questa funzione, ma era l'unico modo che mi era venuto in mente,
in poche parole dovrei cercare di modificare qeusto codice in maniera che mi prenda 2 record per ogni sotto sezione, secondo te è possibile?!
p.s alla fine non ho incollato le parentesi graffe perché il mio pezzo di codice è leggermente più lungo..
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Beh, visto che lo avevo preparato lo posto cmq
in mysql esiste la funzione RAND()
e avevo pensato a qualcosa del genere
PHP:
<?php
include 'connessione.php';
$q = "SELECT SottoSezione FROM dati GROUP BY SottoSezione";
$res = mysql_query($q);

$array = array();
while ($row = mysql_fetch_array($res)) {
    $query = "SELECT * FROM dati WHERE SottoSezione = '" . $row['SottoSezione'] . "' ORDER BY RAND() LIMIT 2";
    $result = mysql_query($query);
    while ($r = mysql_fetch_array($result)) {
        $array[] = $r;
    }
}
// per estrarre i dati
echo "<table border='1'>";
echo "<tr>";
echo "<td>Id</td>";
echo "<td>Sezione</td>";
echo "</tr>";
foreach ($array as $value) {
    echo "<tr>";
    echo "<td>" . $value['id'] . "</td>";
    echo "<td>" . $value['SottoSezione'] . "</td>";
    echo "</tr>";
}
echo "</table>";
?>
ma se avevo capito a mala pena la tua prima domanda con i dettagli della seconda mi sono perso
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
ma se avevo capito a mala pena la tua prima domanda con i dettagli della seconda mi sono perso

Cerco di spiegare, allora nel database sono inserite più domande. Una domanda ha un Id, appartiene ad una sezione ed a una sottosezione.
Facendo un esempio e contando che la domanda sia ad esempio di geografia:
Id_test 1 , Domanda , Sezione 1, Sottocategoria Geografia.
Ora supponete che io ho più sottocategorie.
Cioè tanti record con id_test , domanda, sezione, sottocategoria

Quello che devo fare è
1)porre all'utente una domanda.
2)Le domande però dovrebbero essere uniche per quell'utente, cioè l'utente deve rispondere una sola volta ad una domanda.
3) Le domande vorrei che venissero poste random, ma vorrei che venissero poste 2 domande per sottocategoria cioè ad esempio:
Anche se ho 100 domande con diverse sottocategorie, vorrei che venissero poste all'utente solamente 2 domande di geografia, 2 di Letteratura, 2 di Storia ecc..

Il codice che ho pubblicato prima è semplicemente il codice che avevo fatto in maniera che all'utente venga presentato una domanda di una cerca Sezione e che quella domanda non sia mai stata fatta a quell'utente..

Sono stato un po più chiaro?
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
allora cerco alla fine di renderlo il più facile possibile fate conto che io ho una tabella fatta in questa maniera:

Id_testDomandaSezioneBranoSottoSezione
1una domanda11Geografia
2una domanda11Geografia
3una domanda11Geografia
4una domanda11Storia
5una domanda11Storia
6una domanda11Storia

Quello che vorre che la mia query facesse è restituire solamete 2 test a caso per ogni sotto sezione. cioè 2 test di storia e 2 test di geografia casualmente.
Fate conto che però io non dovrei sapere quali sotto sezioni ci sono ne quante..
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Quello che vorre che la mia query facesse è restituire solamete 2 test a caso per ogni sotto sezione. cioè 2 test di storia e 2 test di geografia casualmente.
il codice che ti ho postato io fa proprio questo
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
Ciao mi funziona, solo che ora ho il problema dell'invio del form, cioè li ho tanti form con tanti submit, potrei in qualche maniera inviare con un solo submit o pulsante tutti i valori presi dai form??
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
ciao
ricorda questo principio: "un problema => un post"

Grazie, penso di aver capito che non è possibile... :/
E se invece riuscissi a mettere tutte le domande in un unico form potrei inviare tutti i dati con il submit, ma poi come potrei gestire l'invio dei dati? scusate se vi rompo ma è una cosa che devo fare in tempi brevi... :/
 
Discussioni simili
Autore Titolo Forum Risposte Data
F Prendere contenuti da una tabella PHP 4
J Prendere dati del database e metterli nel codice php PHP 1
R [PHP] Prendere dati da moduli di ricerca esterni PHP 4
trattorino [PHP] prendere contenuto dentro un div PHP 3
felino [VBScript] XML Prendere il Value di un childnode attravervo il nome del nodo Visual Basic 0
V Generare array da ciclo while e prendere valori casuali PHP 4
felino [VbScript] SwfObject: prendere il contenuto di una cella Visual Basic 0
D Libro per php,quale prendere? PHP 1
V Scorrere elementi DOM e prendere dei valori Javascript 8
H Prendere una parte dall'URL PHP 5
H Email di conferma e prendere il nome. PHP 1
A Funzione unica per prendere e recuperare valori Javascript 0
C Prendere la grafica di un tema gratuito wordpress WordPress 2
D prendere parte di testo da un sito .NET Framework 2
L Prendere il codice di una pagina e inserirlo in una variabile PHP 2
Emix Prendere valori da una tabella e concatenarli ad un altra... MySQL 28
ivarello Prendere dati da un altro sito PHP 2
Frank10 Come funzionano le foto di altri siti? Si possono prendere o no? Leggi, Normative e Fisco 5
M Prendere i valori da un input type="text" senza usare il bottone "submit" PHP 2
F prendere 3 record di ogni categoria da una sola tabella PHP 5
F selezionare dati tra due tabelle e prendere max valori PHP 10
N Prendere dati dal database Mysql PHP 8
Z Prendere e leggere il nome ID Javascript 1
Frank10 Siti web dove prendere immagini sicure? HTML e CSS 5
valient13 prendere nomi da database PHP 2
S Prendere dati da un sito web esterno e mostrarli sul proprio PHP 2
zighy Prendere visione della notifica PHP 2
O la select per prendere dati da un campo ENUM ripete dieci volte i valori PHP 2
N Prendere immagine da web e inserire su proprio sito PHP 2
N Prendere un testo da un database Snippet PHP 0
H Php,Sql.. prendere i dati prima di oggi PHP 7
Dragon Problema: prendere un comando da un iframe e passarlo ad un altro HTML e CSS 2
G Spero di prendere 6 Presenta il tuo Sito 2
L dove la posso prendere questo java? Javascript 2
F stampare a video i risultati della query PHP 1
P Passare i risultati di un foreach in un modal. Help! PHP 2
G eseguire calcoli matematici su risultati 2 tabelle mysql PHP 4
TpD Incolonnare risultati query (mysql_result deprecato...) PHP 3
S come togliere un post dai risultati di google? Supporto Mr.Webmaster 5
M Filtrare risultati con valori checkbox passati con jquery jQuery 2
M [PHP] Mostrare risultati di una tabella ma solo se ID è attivo PHP 0
A [MySQL] Ottenere più risultati in un unico campo MySQL 7
Alex_70 [PHP] Ricerca con risultati cliccabili PHP 21
maxnegri [PHP] Eliminare risultati duplicati da ciclo foreach ottenuti da una select php mysqli PHP 18
A [PHP] If e Else paginazione ok ci sono risultati no ma avanti lo stesso PHP 15
G [PHP] operazione matematica tra risultati di query PHP 5
Sangy PHP risultati negativi in rosso PHP 2
P Google risultati di ricerca inappropriati SEO e Posizionamento 1
D [PHP] questi risultati in una tabella PHP 4
trattorino [PHP] Risultati dentro array precisi e confrontabili PHP 7

Discussioni simili