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.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao,
magari p piu semplice capire come mai non va l'ORDER BY
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Si, cerchiamo di capire come mai non funziona l'ORDER BY. Inizia col postare la query.
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
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...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
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 :/
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
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! :/
 

loreberti10

Utente Attivo
22 Set 2012
43
0
0
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
Autore Titolo Forum Risposte Data
P Sort di un array da ordinamento fisso PHP 4
N didattica base: array.sort Javascript 0
napuleone problema con sort e asort PHP 4
I PROBLEMA CODICE INSERTION SORT C C/C++ 2
I PROBLEMA CODICE C - INSERTION SORT Presentati al Forum 1
A spiegazioni merge sort ricorsivo Java 0
P Insertion Sort tramite puntatori in C Programmazione 0
M Array associativi php su 2 campi mysql PHP 10
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L Sessione e array per utenti PHP 0
R Importazione csv su mysql tramite array PHP 2
elpirata Ricavare e stampare indirizzo ip da array associativo PHP 0
P Ciclare tra array di oggetti PHP 1
R Raggruppare valori array PHP 5
S Come conoscere la posizione di numeri in un array escludendo i doppioni PHP 4
D Popolare array PHP 8
R Includere elementi array fra apici PHP 1
P Array da foreach PHP 2
N Variabile di sessione è un array PHP7 PHP 3
R Scorporare array e recuperare record tabella PHP 10
A Contare gli elementi di un array PHP 13
A Importare array in mysql PHP 1
A Array di immagini Sviluppo app per Android 10
D Chiave unica in estrazione dati da array php PHP 0
D Spazio vuoto in un elemento di un array php PHP 2
S Come filtrare valori di un array PHP 4
mazman mysqli_query() mi ritorna un array vuoto anche se presente un record nella tabella PHP 13
A Non è un array e nemmeno un intero, che tipo di dato è? Javascript 1
max1974 PHP, Array Multidimensionale e Grafici PHP 22
S [PHP] Confrontare due array con valori quasi uguali PHP 2
MarcoGrazia [PHP] Unioni di due array con somma di valori PHP 6
R [PHP] Visualizzazione dati Array PHP 2
S [PHP] Eliminare doppioni array e rinumerare le posizioni PHP 2
M Importare - Manipolare Json Array Sviluppo app per Android 2
M [PHP] Problemi su inserimento array nel db PHP 7
M [PHP] Visualizzare un array partendo dal numero 1 e non 0 PHP 5
G [ASP] Ciclare i valori di 2 array Classic ASP 2
S [PHP] Estrarre elementi array su più variabili PHP 5
S [PHP] Estrarre dati tabella in diversi array PHP 2
max1974 [PHP] Raggruppare array PHP 4
A [PHP] Caricamento database in array PHP 11
G sql select con array in php PHP 1
L [Java] Aggiungere elementi ad array JSON Java 0
S [PHP] individuare chiave elemento array PHP 7
A [PHP] Script con array con numeri che iniziano per 00 PHP 2
Emix [Javascript] Somma con array input HTML Javascript 1
S [PHP] selezionare colonna tabella utilizzando un array PHP 1
M [PHP] Array di array - PDO PHP 2
S [Javascript] come estrarre valori array e inserirli in diverse variabili Javascript 1

Discussioni simili