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

    [SQLITE] Problemi con query count

    Probabilmente mi sto perdendo in un bicchier d'acqua, il problema è questo:

    Ho un db di un forum in cui ho una tabella "posts" con nome utente, data, threadID eccetera. Voglio tirar fuori una tabella del tipo:

    Pippo - Post fatti a Gennaio - Post fatti a Febbraio - ecc

    L'idea quindi era di usare una count ma non mi sta riuscendo bene, ho provato a scriverla così:

    codice:
    SELECT posts.userName AS uName, (SELECT count(*)
            FROM posts 
            WHERE posts.date >='2007-01-01 00:00' AND posts.date <='2007-02-01 00:00' AND posts.userName = p1.uName) AS count1,         
            (SELECT count(*)
            FROM posts 
            WHERE posts.date >='2007-02-01 00:00' AND posts.date <='2007-03-01 00:00' AND posts.userName = p1.uName) AS count
    FROM posts AS p1 
    GROUP BY uName
    Sarà l'orario, sarò io un pò arruginito con l'SQL ma non capisco dov'è l'errore, mi dice:
    codice:
    WARN      Database Reader     java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such column: posts.userName)
    Vi ringrazio in anticipo per l'aiuto,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Il messaggio di errore ti sta dicendo che non esiste la colonna userName nella tabella posts, controlla che sia scritta correttamente..

  3. #3
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da Colla87 Visualizza il messaggio
    Il messaggio di errore ti sta dicendo che non esiste la colonna userName nella tabella posts, controlla che sia scritta correttamente..
    Giusto, perchè alla tabella "posts" ha assegnato un allias "p1"
    ........
    FROM posts AS p1
    .......

  4. #4
    Essi come immaginavo era una svista dato l'orario, ad ogni modo per avere Username e poi di seguito tutti i mesi ho scritto questa query:

    codice:
    SELECT posts.userName as Username1, count(*) AS Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, ISNULL(Dicembre, 0)
    FROM posts
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username2, count(*) AS Febbraio
    FROM posts
    WHERE posts.date >='2007-02-02 00:00' AND posts.date <='2007-03-01 00:00'
    GROUP BY posts.date >='2007-02-01 00:00' AND posts.date <='2007-03-01 00:00', posts.userName)
    ON  Username1 = Username2
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username3, count(*) AS Marzo
    FROM posts
    WHERE posts.date >='2007-03-01 00:00' AND posts.date <='2007-04-01 00:00'
    GROUP BY posts.date >='2007-03-01 00:00' AND posts.date <='2007-04-01 00:00', posts.userName)
    ON  Username1 = Username3
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username4, count(*) AS Aprile
    FROM posts
    WHERE posts.date >='2007-04-01 00:00' AND posts.date <='2007-05-01 00:00'
    GROUP BY posts.date >='2007-04-01 00:00' AND posts.date <='2007-05-01 00:00', posts.userName)
    ON  Username1 = Username4
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username5, count(*) AS Maggio
    FROM posts
    WHERE posts.date >='2007-05-01 00:00' AND posts.date <='2007-06-01 00:00'
    GROUP BY posts.date >='2007-05-01 00:00' AND posts.date <='2007-06-01 00:00', posts.userName)
    ON  Username1 = Username5
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username6, count(*) AS Giugno
    FROM posts
    WHERE posts.date >='2007-06-01 00:00' AND posts.date <='2007-07-01 00:00'
    GROUP BY posts.date >='2007-06-01 00:00' AND posts.date <='2007-07-01 00:00', posts.userName)
    ON  Username1 = Username6
    
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username7, count(*) AS Luglio
    FROM posts
    WHERE posts.date >='2007-07-01 00:00' AND posts.date <='2007-08-01 00:00'
    GROUP BY posts.date >='2007-07-01 00:00' AND posts.date <='2007-08-01 00:00', posts.userName)
    ON  Username1 = Username7
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username8, count(*) AS Agosto
    FROM posts
    WHERE posts.date >='2007-08-01 00:00' AND posts.date <='2007-09-01 00:00'
    GROUP BY posts.date >='2007-08-01 00:00' AND posts.date <='2007-09-01 00:00', posts.userName)
    ON  Username1 = Username8
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username9, count(*) AS Settembre
    FROM posts
    WHERE posts.date >='2007-09-01 00:00' AND posts.date <='2007-10-01 00:00'
    GROUP BY posts.date >='2007-09-01 00:00' AND posts.date <='2007-10-01 00:00', posts.userName)
    ON  Username1 = Username9
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username10, count(*) AS Ottobre
    FROM posts
    WHERE posts.date >='2007-10-01 00:00' AND posts.date <='2007-11-01 00:00'
    GROUP BY posts.date >='2007-10-01 00:00' AND posts.date <='2007-11-01 00:00', posts.userName)
    ON  Username1 = Username10
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username11, count(*) AS Novembre
    FROM posts
    WHERE posts.date >='2007-11-01 00:00' AND posts.date <='2007-12-01 00:00'
    GROUP BY posts.date >='2007-11-01 00:00' AND posts.date <='2007-12-01 00:00', posts.userName)
    ON  Username1 = Username11
    
    LEFT OUTER JOIN 
    (SELECT posts.userName as Username12, count(*) AS Dicembre
    FROM posts
    WHERE posts.date >='2007-12-01 00:00' AND posts.date <='2008-01-01 00:00'
    GROUP BY posts.date >='2007-12-01 00:00' AND posts.date <='2008-01-01 00:00', posts.userName)
    ON  Username1 = Username12
    
    WHERE posts.date >='2007-01-01 00:00' AND posts.date <='2007-02-01 00:00'
    GROUP BY posts.date >='2007-01-01 00:00' AND posts.date <='2007-02-01 00:00', posts.userName
    Essendo però che in alcuni casi il valore è nullo volevo fare in modo che mi sostituisse il valore nulle con 0 (invece del ?) e leggevo su internet che bastava scrivere ISNULL(campo,0) ma mi da errore, dove sbaglio? (per ora l'ho scritto solo sul campo dicembre ma dovrei inserirlo su tutti).
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  5. #5
    ma non ti bastava fare una group by month(posts.date)?

  6. #6
    Quote Originariamente inviata da optime Visualizza il messaggio
    ma non ti bastava fare una group by month(posts.date)?
    In SQLITE non c'è quella funzione, stavo provando a fare così leggendo su internet:

    codice:
    SELECT posts.userName, count(posts.userName)
    FROM posts
    GROUP BY strftime('%m', datetime(date, 'unixepoch')), posts.userName
    Ma non fa ciò che deve

    Tra l'altro nel mentre mi è uscito un dubbio su un altra query, ovvero vorrei concatenare in un unico campo tutti i post di un thread, ovvero avere qualcosa del tipo:
    Titolo Thread -> post1+post2+..+postn.
    Secondo voi scritta così va bene?

    codice:
    select threadID, title, group_concat(content, ' ')
    from posts
    GROUP BY threadID
    ORDER BY threadID ASC
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  7. #7
    1: che vuol dire "non fa ciò che deve"?
    2: non mettere due domande nello stesso thread...

  8. #8
    Quote Originariamente inviata da optime Visualizza il messaggio
    1: che vuol dire "non fa ciò che deve"?
    2: non mettere due domande nello stesso thread...
    Mi ritorna solo Username ed una sola "somma" per utente, che immagino sia di un singolo mese.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  9. #9
    beh, dipende dalla query, per noi sconosciuta, visto che non l'hai postata (è anche colpa mia che ancora non ho ritirato la boccia di vetro dallo stagnaro che la sta riparando....)

    io farei qualcosa del tipo

    SELECT Utente, Month(DataPost), Count(*)
    FROM Posts
    Where Year(DataPost)=2007
    GROUP BY Utente, Month(DataPost)


  10. #10
    Quote Originariamente inviata da optime Visualizza il messaggio
    beh, dipende dalla query, per noi sconosciuta, visto che non l'hai postata (è anche colpa mia che ancora non ho ritirato la boccia di vetro dallo stagnaro che la sta riparando....)

    io farei qualcosa del tipo

    SELECT Utente, Month(DataPost), Count(*)
    FROM Posts
    Where Year(DataPost)=2007
    GROUP BY Utente, Month(DataPost)


    La query l'avevo postata poco sopra ma Year e Month non esistono in SQLite, ho provato a modificarla come segue:

    codice:
    SELECT userName, strftime('%m', date), Count(*)
    FROM Posts
    GROUP BY userName, strftime('%m', date)
    Usando strftime come leggevo su internet ma invece di avere una tabella del tipo:
    Nome utente - #Post Gennaio - ... - #Post Dicembre

    Mi esce
    Nomeutente - Mese - #Post
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

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.