Back to top

Autore Topic: consiglio select  (Letto 1702 volte)

Offline devillino

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
consiglio select
« il: 04 Set 2013, 11:10:20 »
Ciao ragazzi/e
mi servirebbe un consiglio, sono davanti a una select da un'ora e non riesco a capire l'errore io vorrei fare una select che estraesse da una tabella gmappa il record avente nel campo voti il voto più alto raggruppando però prima tutti i records per categoria; (però fra questi record devo prendere solo quelli che hanno un legame di amicizia espresso dalla tabella comprofiler_members [componente cb] tramite il campo meberid<->referenceid e siccome la user nella tabella gmappa non è l'id numerico ho messo nella join anche la tabella users).
ho abbozzato la seguente select:
Codice: [Seleziona]

$query= "select  cont, categoria, nome, max(voto), descrizione
from #__gmappa AS p
right outer Join #__users AS u ON p.utente = u.username
right outer join #__comprofiler_members AS f ON u.id = f.referenceid
where f.memberid =" . $db->quote($user->id) ."
group by categoria";

riscritta anche nel seguente modo utilizzando le api di joomla (le ho trovate nella documentazione joomla):
Codice: [Seleziona]
$query
->select('u.username, p.cont, p.categoria, p.nome, p.voto, p.descrizione')
->from('#__gmappa AS p')
->join('RIGHT', '#__users AS u ON p.utente = u.username')
->join('RIGHT', '#__comprofiler_members AS f ON u.id =  f.referenceid ')
->where('f.memberid='.$db->quote($user->id)
    AND('accepted = 1') )
->group("categoria"); 
però con entrambi i codici (dovrebbero essere equivalenti) non ottengo il risultato desiderato ...potreste darmi qualche dritta sulle join? altra domanda ma quali delle due sintassi è meglio usare?? a me sembra più leggibile e modificabile la seconda voi che dite?
Ultima domanda, ma la seconda ha un nome particolare? (per trovare info più facilmente su google)
Grazie:)
« Ultima modifica: 04 Set 2013, 11:11:59 da devillino »

Offline devillino

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re:consiglio select
« Risposta #1 il: 04 Set 2013, 15:47:31 »
capito il problema .... sbaglio l'uso della funzione max ...non mi restituisce l'intero record ma solo il valore maggiore per un determinato gruppo quindi devo studiare la select in modo differente!
restano aperte però le domande fatte nel primo post  :)

Offline baldo

  • Esploratore
  • **
  • Post: 65
  • Sesso: Maschio
    • Mostra profilo
Re:consiglio select
« Risposta #2 il: 05 Set 2013, 15:33:59 »
Citazione
la seconda ha un nome particolare? (per trovare info più facilmente su google)

banalmente è la classe query di joomla che modella la composizione delle query, ma su google troverai più facilemte l'argomento generale, ossia l'accesso al database con joomla


quando raggruppi i risultati di una select
Citazione
group by categoria
non ottieni un singolo valore ma un record come volevi tu

specialmente quando metti in relazione più tabelle ti consiglio di usare gli alias
NOMETABELLA AS alias
semplicità ... al sol nominarla sembra svanire

Offline devillino

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re:consiglio select
« Risposta #3 il: 05 Set 2013, 17:47:17 »
esatto si si...con group by ottenevo quello che mi serviva però la cosa strana è quando utilizzavo anche la funzione max su un campo di tipo int: mi prendeva un record fra quelli della categoria e al suo interno piazzava il max di quella colonna che però stava in un'altro record :S; ho dovuto togliere il max e il group by e fare un algoritmo a manella :( ...facendo così avevo si un record per categoria con il campo max più alto (e fin qui ok!), ma con i gli altri campi valorizzati con valori di altri record (precisamente prendeva tutti gli altri campi pari ai campi del primo record che mi usciva dall'estrazione senza group by).


voi avete mai fatto prove simili? perchè altrimenti sbagliavo io ....nel caso ...la select è sbagliata??  :-\

joomla_fan

  • Visitatore
Re:consiglio select
« Risposta #4 il: 05 Set 2013, 17:59:06 »
Ciao.

Forse dovresti provare qualcosa del tipo:

select *from tabella_gamma
where voto = (select max(voto) from tabella_gamma)

Attenzione!! Se hai più record con uguale max(voto) ricevi in risposta più record.

 

Offline devillino

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re:consiglio select
« Risposta #5 il: 05 Set 2013, 18:06:42 »
ci ho pensato ma con le join e il group by non sapevo bene come risolvere ho preferito fare una funzioncina vicino dopo aver estratto i dati..fatti prima :)

 



Web Design Bolzano Kreatif