Problema con funzione select count
Problema con funzione select count postato il 14/04/2015 17:24:40 nel forum programmazione, open source e hosting
Salve a tutti, ho modificato il pannello dedicato alle gilde in modo tale che raggruppasse tutte le razze con relative descrizioni e appartenenti.
Tuttavia ho un piccolo problemino con il select count che permette di sapere quanti sono i membri di una determinata razza, al momento mi conteggia tutti i pg iscritti senza alcuna differenza , come posso correggerlo?
Il codice in questione è questo
$numb=gdrcd_query("SELECT COUNT(*) FROM personaggio INNER JOIN razza
ON razza.id_razza = personaggio.id_razza");
grazie a chiunque mi risponderà ;)
Pagine → 1
14/04/2015 18:16:00
Ciao :)
prova qualcosa del genere:
$num= gdrcd_query("SELECT COUNT(id) as count FROM personaggio, razza WHERE razza.id_razza = personaggio.id_razza AND razza.id_razza='$razza'");
dove $razza sarà il dato che dovrai passare per filtrare la razza che ti interessa. Successivamente, puoi richiamare il count:
<? echo $num[count];?>
ti sconsiglio il COUNT(*) perchè vai a sovracaricare la query, e se ci sono molti dati nella tabella, un semplice count come questo va a rallentarti tutto. Per farlo, ti basta solo un solo campo della tabella :)
14/04/2015 18:17:15 e modificato da dyrr il 14/04/2015 18:55:33
SELECT COUNT(personaggio.nome) AS numero, razza.nome_razza
FROM personaggio
LEFT JOIN razza ON razza.id_razza = personaggio.id_razza
GROUP BY personaggio.id_razza
Questo se vuoi una query che ti restituisca due campi, il nome della razza e il numero dei pg per quella razza
Altrimenti se ti serve per una singola razza di cui hai l'id l'esempio che ti hanno dato sopra come teoria va bene
faccio solo una piccola correzione qualche piccola correzione sulla query perchè mi sa che è stata modificata male quella originale:
$num = gdrcd_query("SELECT COUNT(personaggio.nome) as count FROM personaggio WHERE personaggio.id_razza='".gdrcd_filter_num($razza)."' LIMIT 0,1");
se devi recuperare solo il numero di personaggi per quella razza la JOIN non ti serve nemmen, ti serve solo se devi recuperare anche il nome della razza che ha quel numero di pg.
15/04/2015 17:45:13
Purtroppo entrambe le funzioni mi restituiscono 0 come risultato.
Inoltre se metto SELECT(id) non mi trova la colonna.
Qualche altra idea?
15/04/2015 18:29:55 e modificato da dyrr il 15/04/2015 19:44:50
Se metti COUNT(id) nonti da nulla perchè il campo id non eiste.
Per le due query sicuro che ti ritornino 0 perchè da me funziona perfettamente. ho anche provato ad esportare le tabelle del gdrcd e fare una prov aonline, e le due query sembrano apposto:
http://sqlfiddle.com/#!2/a77ad/3 ↗
15/04/2015 20:33:29
Ho provato con la funzione che hai scritto tu, ma purtroppo quando stampa non mi da nulla oppure se metto
SELECT COUNT(personaggio.nome) as count FROM personaggio WHERE personaggio.id_razza= "1001" LIMIT 0,1
mi da soltanto gli appartenenti ad una razza
ti ricopio qui tutto il codice, magari c'è qualche errore sparso
<?php while ($row=gdrcd_query($result, 'fetch')){
/*Conteggio i membri di razza*/
$num = gdrcd_query("
SELECT COUNT(personaggio.nome) as count FROM personaggio INNER JOIN razza WHERE personaggio.id_razza = razza.id_razza LIMIT 0,1
");
if ($row['tipo']!=$last_type){?>
mentre per stampare il tutto
<? echo $num[count];?>
15/04/2015 20:43:10 e modificato da dyrr il 15/04/2015 20:47:34
<?php while ($row=gdrcd_query($result, 'fetch')){
/*Conteggio i membri di razza*/
$num = gdrcd_query("
SELECT COUNT(personaggio.nome) as count FROM personaggio INNER JOIN razza WHERE personaggio.id_razza = razza.id_razza LIMIT 0,1
");
if ($row['tipo']!=$last_type){?>
Perchè il pezzo sottolineato?
L'inner join non ti serve perchè non recuperi nessun dato dalla tabella con cui fai il JOIN
Nella query nel where ti servirà comparare personaggio.id_razza con il valore recuperato dal ciclo while sopra del tipo:
$num = gdrcd_query("SELECT COUNT(personaggio.nome) as count FROM personaggio WHERE personaggio.id_razza='".gdrcd_filter_num($row['id_razza'])."' LIMIT 0,1");
N.B.: controlla se il nome del campo che ho scritto è giusto, a memoria mi sembra che quel while recuperi l'id razza con il nome di $row['id_razza']
N.N.B.: se copi incolli il codice, sostituisci tutti i ' con l'apice singolo quello sotto il ? perchè il forum li converte e in mysql la differenza tra i due apici c'è.
15/04/2015 22:19:38
Grazie sono riuscito a risolvere ;) il problema erano proprio gli apici mancavano questi ""
comunque, ho un ultimissimo problemino
quando clicco sulla razza all'interno mi stampa i nomi di tutti gli appartenenti alle varie razze, sai percaso come potrei correggerlo?
<?php /*Elenco affiliati*/
$query= " SELECT razza.id_razza, razza.nome_razza, razza.iconc, razza.iconm, razza.iconf, personaggio.sesso, personaggio.cognome, personaggio.nome, personaggio.id_razza FROM personaggio
INNER JOIN razza WHERE personaggio.id_razza= '".gdrcd_filter_num($row['id_razza'])."'
ORDER BY nome
";
$result=gdrcd_query($query, 'result');
?>
ps:
iconc, iconf e iconm sono le icone di razza in base al sesso .
15/04/2015 23:11:28
quando clicco sulla razza all'interno mi stampa i nomi di tutti gli appartenenti alle varie razze, sai percaso come potrei correggerlo?
in che senso, tu che cosa vorresti che ti stampasse?
15/04/2015 23:54:41
Vorrei che mi stampasse solo i membri di quella determinata razza
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Crossout ↗
World of the Sea Battle ↗
Raja Dunia ↗
Imperion ↗
Tibia ↗
Project Entropy ↗
Neverness to Everness ↗