Come usare COUNT(*) e GROUP BY in campi con valori misti?

Discussioni e problematiche sul linguaggio PHP

Moderatori: maurizio, markdesign

Regole del forum
Per scrivere del codice all'interno di ogni post, utilizzare il tag: [syntax=il_linguaggio]codice[/syntax] sostituendo "il_linguaggio" con il linguaggio del codice che dovete inserire, ad esempio: html, css, javascript, php, asp, ecc...

Come usare COUNT(*) e GROUP BY in campi con valori misti?

Messaggioda webby » giovedì 19 gennaio 2012, 20:45

Buona sera a tutti,
mi trovo a dover scrivere una funziona che mi resituisca i top 'x' dati di una tabella in ordine crescente.
Per una struttura normale si userebbe una query con COUNT(*) e GROUP BY campo, ma secondo la struttura che ho fatto io tutto ciò non funziona.
Ebbene si perchè nella mia struttura ho messe più valori in uno stesso campo, separati da un carattere speciale che, all'occorrenza, elimino tramite un explode facendomi stampare solo i dati che mi interessano.
Come faccio, mantenendo questa struttura (ciò è importante per me), a realizzare una funzioni che mi stampi i primi 'x' valori contenuti in ogni campo?
Grazie.
webby

Avatar utente
 
Messaggi: 61
Iscritto il: domenica 27 giugno 2010, 21:09

Re: Come usare COUNT(*) e GROUP BY in campi con valori misti

Messaggioda markdesign » venerdì 20 gennaio 2012, 0:57

Riesci a spiegarti meglio?
Magari riportando lo schema relazionale:
IMPIEGATO(NOME, COGNOME, TELEFONO)

e un esempio:
IMPIEGATO[(Gigi, D'alessio, 1234567890), (Robbie, Williams, 1234567890)]

Così riesco (spero) ad aiutarti...

Grazie!! :rock:
markdesign

Moderatore

Avatar utente
 
Messaggi: 94
Iscritto il: lunedì 14 novembre 2011, 18:37
Località: Pordenone

Re: Come usare COUNT(*) e GROUP BY in campi con valori misti

Messaggioda Paolob » venerdì 20 gennaio 2012, 9:07

webby ha scritto:Ebbene si perchè nella mia struttura ho messe più valori in uno stesso campo, separati da un carattere speciale che, all'occorrenza, elimino tramite un explode facendomi stampare solo i dati che mi interessano.


Se ho capito bene hai un campo, magari di testo, dove hai inserito più valori separati da un carattere
es. 10;26;40 per ogni riga....

Se ho capito bene mi sa che non riesci con una select secca...
Mi sa che la struttura del DB non è la migliore che si poteva pensare...
Il tutto sempre discutibile...

Contao Italian Conference 2012 - Cervia, 26 maggio 2012
Paolob

Moderatore

Avatar utente
 
Messaggi: 116
Iscritto il: lunedì 13 giugno 2011, 14:57
Località: Cesena

Re: Come usare COUNT(*) e GROUP BY in campi con valori misti

Messaggioda webby » venerdì 20 gennaio 2012, 15:25

Ciao ragazzi e grazie per le vostre risposte.
In effetti non mi sono spiegato bene, ma la struttura è quella che ha esposto meglio "Paolob".
So bene che la struttura del DB non sia delle migliori, ma trovo molto utile la consultazione e la modifica in questo modo.
Per questo motivo chiedevo a voi una soluzione per effettuare una o più query che mi dessero una sorta di "top ten" dei valori.
Non avete alcun'altra idea?
webby

Avatar utente
 
Messaggi: 61
Iscritto il: domenica 27 giugno 2010, 21:09

Re: Come usare COUNT(*) e GROUP BY in campi con valori misti

Messaggioda Paolob » venerdì 20 gennaio 2012, 15:40

Come detto... non vedo soluzioni con il solo SQL, per cui mi farei una mini funzione.
A livello concettuale:
1- Select di tutte le righe
2- Leggo tutte le righe salvando in un array chiave/valore i singoli valori
3- Ordinamento dell'array
4- Recupero i 10 valori che mi servono con relative chiavi (che avranno corrispondenza sulla tabella iniziale)
5- Select delle 10 sole righe che mi servono


così ad istinto con le poche informazioni che abbiamo...
Il tutto sempre discutibile...

Contao Italian Conference 2012 - Cervia, 26 maggio 2012
Paolob

Moderatore

Avatar utente
 
Messaggi: 116
Iscritto il: lunedì 13 giugno 2011, 14:57
Località: Cesena

Re: Come usare COUNT(*) e GROUP BY in campi con valori misti

Messaggioda webby » venerdì 20 gennaio 2012, 17:53

Ciao e grazie paolob,
le informazioni che vi ho dato sono proprio quelle.
Cioè nella mia tabella io 3 campi
|--ID--|---|id_separati_da_virgola--|--timestamp--|

Stop!
E' una semplice tabella con questi 3 campi e il funzionamento l'ho spiegato prima, ovvero estrarre una top ten di tutti i valori contenuti in ogni campo "id_separati_da_virgola" e ordinarli crescentemente.
Giusto per farvi un esempio, ma penso ormai sia chiaro:

|--ID--|---id_separati_da_virgola--|--timestamp--|
|--1---|---1,4,6,5,7,8----------------|--187947890---|
|--2---|---1,2,3,6,9---------------------|--187947890---|
|--1---|---1,2,8-----------------------|--187947890---|
|--1---|---3,9-------------------------|--187947890---|

e quindi la funzione che interessa a me è una funzione che mi restituisce il conteggio di ogni valore nei vari campi, cioè:
1(3 occorrenze)
4(1)
6(1)
3(2)
...ecc...ecc
webby

Avatar utente
 
Messaggi: 61
Iscritto il: domenica 27 giugno 2010, 21:09

Re: Come usare COUNT(*) e GROUP BY in campi con valori misti

Messaggioda Paolob » venerdì 20 gennaio 2012, 18:06

OK,
allora puoi fare come ti ho indicato, dove, se capisco bene il punto 5, quello di fare una successiva select sulla tabella non dovrebbe servirti.
Il tutto sempre discutibile...

Contao Italian Conference 2012 - Cervia, 26 maggio 2012
Paolob

Moderatore

Avatar utente
 
Messaggi: 116
Iscritto il: lunedì 13 giugno 2011, 14:57
Località: Cesena


Torna a PHP