Sort di Array per una certa chiave

loreberti10

Utente Attivo
22 Set 2012
43
0
0
Ciao a tutti, volevo chiedervi una cosa che non riesco a fare.
Io ho un array di elementi con diverse chiavi associative,ottenuto da una query
while($contenuti2[$indice] = sqlite_fetch_array($risultato2))

Ora quello che vi volevo chiedere è come posso dopo aver creato l'array, ordinarlo secondo un certa chiave, nel senso se io ho un array di questo tipo
Array([idTest]=>1, [TestQuestion]=>String(288), [Conteggio]=>1, )

come faccio a ordinare l'array secondo la chiave [Conteggio]?

Perché in pratica devo restituire la domanda che ha avuto meno risposte, e Conteggio sarebbe il numero di risposte ottenute da quella domanda,
Premetto che non so il motivo ma l'ORDER BY Conteggio nella query non lo prende...
Quindi avevo in mente di ordinare dopo aver costruito l'array.
 
Ciao,
magari p piu semplice capire come mai non va l'ORDER BY
 
Si, cerchiamo di capire come mai non funziona l'ORDER BY. Inizia col postare la query.
 
ok, è un discorso un po complicato ma spero di essere abbastanza chiaro...
La query è questa:
Codice:
SELECT id_test,Test_Question,  COUNT(*) AS Conteggio
FROM  

(SELECT DISTINCT id_test, Test_Question, id_testUtente, NickNameRisposta
FROM Admin JOIN RispostaUtente
WHERE id_test = id_testUtente)

WHERE id_test = id_testUtente AND id_test = '".$idTestMancanti."'
GROUP BY id_test
order by Conteggio ASC


Allora in pratica io dovrei fare questa cosa, ho degli utenti che effettuano il login al sito/applicazione;
Nel database, più precisamente nella Tabella "Admin" io ho degli id_test e delle domande, in "RispostaUtente" io ho una serie di Id_testUtente che fa riferimento a id_test di Admin, NickNameRisposta che sarebbero gli utenti, e Answer che sarebbe la risposta che quell'utente a effettuato alla domanda,
Ora quello che dev fare io è Presentare all'utente, la domanda che ha avuto meno risposte in generale.
Il distinct è perché un utente, avendo a disposizione 3 scelte per la risposta può selezionare più di 1 risposta nel senso che può rispondere ad una domanda con 2 checkbox, quindi il distinct è per contare una volta sola quei casi, quello che mi succede è che la prima volta mi funziona, cioè all'utente che si connette viene presentato il numero giusto ecc, mentre al secondo utente viene semplicemente presentato il primo test seguito dal secondo ecc...
So che è una cosa complicata e chiedete pure tutto quello che non c'è di chiaro e se serve altre righe di codice...
 
Puoi provarla cosi direttamente su phpmyadmin e verificare i risultati?

Codice:
SELECT id_test,Test_Question,Conteggio
FROM  
(SELECT DISTINCT id_test, Test_Question, id_testUtente, COUNT(*) AS Conteggio
FROM Admin JOIN RispostaUtente
WHERE id_test = id_testUtente
GROUP BY id_test
)
WHERE id_test = '".$idTestMancanti."'

ORDER BY Conteggio ASC

ps: se fai su phpmyadmin devi modificare questo '".$idTestMancanti."'
 
Ultima modifica:
ciao
se non sbaglio la clausola AS attribuisce un alias al campo.
quindi, sempre che non sbagli, hai un campo che si chiama conteggio e poi attribuisci lo stesso alias a count(*).
prova

Codice:
SELECT id_test,Test_Question,Conteggio
FROM  
(SELECT DISTINCT id_test, Test_Question, id_testUtente, COUNT(*) AS Conta
FROM Admin JOIN RispostaUtente
WHERE id_test = id_testUtente
GROUP BY id_test
)
WHERE id_test = '".$idTestMancanti."'
ORDER BY Conteggio ASC
 
ciao
se non sbaglio la clausola AS attribuisce un alias al campo.
quindi, sempre che non sbagli, hai un campo che si chiama conteggio e poi attribuisci lo stesso alias a count(*).
prova

Codice:
SELECT id_test,Test_Question,Conteggio
FROM  
(SELECT DISTINCT id_test, Test_Question, id_testUtente, COUNT(*) AS Conta
FROM Admin JOIN RispostaUtente
WHERE id_test = id_testUtente
GROUP BY id_test
)
WHERE id_test = '".$idTestMancanti."'
ORDER BY Conteggio ASC

Ciao, no io non ho un campo Conteggio, e facendo così come mi hai indicato mi darebbe errore perché non trova Conteggio, io in pratica dovrei contare quante risposte ci sono in Risposta Utente(senza contare le doppie di un singolo utente) e fare in maniera(id_test = '".$idTestMancanti."') che all'utente venga posta la domanda che gli manca, però così come mi hai indicato sicuramente mi darebbe errore perché Conteggio è l'alias che do alla conta, e vorrei proprio ordinare per quello

Puoi provarla cosi direttamente su phpmyadmin e verificare i risultati?
Ora come ora non potrei perché mi è stato chiesto di sviluppare con SQLite :/
 
ma l'hai provata?
Codice:
SELECT id_test,Test_Question,Conteggio
FROM  
(SELECT DISTINCT id_test, Test_Question, COUNT(*) AS Conteggio
FROM Admin JOIN RispostaUtente
WHERE id_test = id_testUtente
GROUP BY id_test
)
WHERE id_test = '".$idTestMancanti."'

ORDER BY Conteggio ASC
in pratica ho solo messo il count e il group by nella query interna, dovrebbe ordinarsi
 
adesso che la guardo meglio ...

non sarebbe piu corretta cosi?
Codice:
SELECT id_test,Test_Question,Conteggio
FROM  
(
SELECT DISTINCT id_test, Test_Question, COUNT(*) AS Conteggio
FROM Admin A
JOIN RispostaUtente RU ON A.id_test = RU.id_testUtente
WHERE A.id_test = '".$idTestMancanti."'
GROUP BY A.id_test
)
ORDER BY Conteggio ASC
 
no, non funzionano, allora io ho pensato di fare una query di questo tipo, ma che purtroppo però non da i risultati sperati
Codice:
SELECT id_test,id_testUtente, COUNT(*) AS c FROM 
(SELECT DISTINCT id_test, Test_Question, id_testUtente, NickNameRisposta
FROM
Admin JOIN RispostaUtente
WHERE id_test= id_testUtente )

GROUP BY id_test


EXCEPT
		
		SELECT id_test,id_testUtente, COUNT(*) AS c FROM 
(SELECT DISTINCT id_test, Test_Question, id_testUtente, NickNameRisposta
FROM
Admin JOIN RispostaUtente
WHERE id_test = id_testUtente AND RispostaUtente.NickNameRisposta = '".$nick."')
GROUP BY id_test


order by c

Il mio intento è nella prima prendere tutti gli id delle domande legati agli id delle risposta(id_testUtente) e contare ..
poi fatta la query sopra escludere i risultati ovvero gli id domande/risposte con NICKNAMERISPOSTA (che sarebbe il NickName dell'utente che risponde )
quando è uguale a $nick che sarebbe ila variabile di SESSIONE dell'utente che viene presa al Login,
Purtroppo però sembra non riconoscere l'except nel senso che effettivamente mi restituisce una serie di ID delle domande, con il numero delle volte a cui ognuna p stata risposta senza però escludere quelle già risposte! :/
 
Ragazzi, grazie comunque sono riuscito a risolvere, ho un po lavorato in php tramite array ecc ma ce l'ho fatta grazie comunque delle risposte, a presto! ;)
 

Discussioni simili