Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [mysql] Contare righe totali e con un certo criterio

    Come da oggetto:

    ho questa tabella

    id, personaggio, criterio
    1, pippo, true
    2, topolino, true
    3, paperino, true
    4, paperina, false
    5, topolino, false
    6, paperino, false
    7, paperino, false
    8, topolino, false

    Io ho bisogno di contare quanti sono i personaggi, e lo faccio con SELECT DISTINCT(personaggio) o con GROUP BY personaggio.

    Ma se contemporaneamente voglio sapere quanti personaggi ci sono con il criterio true ?

    Senza fare una seconda query è possibile saperlo?
    Ciao!

  2. #2
    codice:
    select *, count(if(criterio = TRUE, 1, 0)) as tot_true
    from tabella 
    group by personaggio

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Ciao Piero, grazie per la risposta.
    un dubbio prima che provi..

    ma in questo modo, il numero dei record totali lo ottengo con mysql_num_rows()...
    mentre con l'operatore ternario conto tutti i record che hanno come criterio true?
    Anche se ho due record: "topolino, true", lui li conta entrambi o ne conta uno solo?

    Grazie di nuovo.
    Ciao!

  4. #4
    Originariamente inviato da fmortara
    Ciao Piero, grazie per la risposta.
    un dubbio prima che provi..

    ma in questo modo, il numero dei record totali lo ottengo con mysql_num_rows()...
    mentre con l'operatore ternario conto tutti i record che hanno come criterio true?
    Anche se ho due record: "topolino, true", lui li conta entrambi o ne conta uno solo?

    Grazie di nuovo.
    Hai un pc, hai la struttura della tabella, sai cosa aspetti di ricevere, hai due mani con un tot di dita... Ed allora??????

    Non e' un mistero buffo si tratta di fare una query. Falla e scrivi qui la tua affermativa risposta:


    ____________________________________________


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Non potevo scriverla e provarla in quel momento.
    Ciao!

  6. #6
    Allora:
    questa mi produce tot:721 sold:721 (DOVREBBE essere tot:721 / sold:7)
    SELECT count(*) AS tot, count(if(status = 'sold', 1, 0)) AS sold
    FROM tabella
    WHERE filtro = '7'

    questa invece tot: 721
    SELECT count(*) AS tot
    FROM tabella
    WHERE filtro = 7

    queste invece sold: 7
    SELECT count(*) AS sold
    FROM tabella
    WHERE filtro= 7 AND status = 'sold'

    come devo fare per correggere?

    questa è la tabella:

    CREATE TABLE tabella (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `filtro` int(10) NOT NULL,
    `campo` int(10) NOT NULL,
    `status` enum('active','sold','del') NOT NULL DEFAULT 'active',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Ciao!

  7. #7
    Rispondo da solo...

    dovevo usare sum e non count col criterio...

    SELECT count(distinct(campo)) AS tot, sum(if(l_status = 'sold',1,0)) AS sold
    FROM tabella
    WHERE filtro = 7
    Ciao!

  8. #8
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    occhio e croce cosi'.

    Se fai una decode dello status assegnandogli un valore 1 o 0 e poi vuoi conteggiarli meglio la somma.
    Originariamente inviato da fmortara

    SELECT count(*) AS tot, SUM (if(status = 'sold', 1, 0)) AS sold
    FROM tabella
    WHERE campo = '7'
    EDIT - Arrivato tardi sorry. Vedo che ci sei arrivato da solo

  9. #9
    Infatti avevo risolto... segnalavo per i posteri
    Grazie


    EDIT: Si dovrebbe mettere un tag risolto ai 3d che hanno una soluzione ed una domanda chiara!!
    Ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.