Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [mySQL] COUNT e * non vanno d'accordo?

    Cercando di ottimizzare le varie query, ho provato a fondere un
    SELECT COUNT(field) FROM tab;
    con
    SELECT nome, cognome FROM tab/tab2

    facendo uscire
    SELECT COUNT(field), nome, cognome FROM tab JOIN tab2 (nel caso la tabella di nome e cognome sia diversa dalla prima),
    altrimenti
    SELECT COUNT(field), nome, cognome FROM tab

    ma entrambe non mi restituiscono valori, se non uno 0 per quanto riguarda COUNT, il resto NULL.

    C'e' qualche modo per sfruttare in questo caso l'unione delle due query o i COUNT devono stare ben distanti da query in cui si selezionano altri campi?

    Grazie in anticipo
    ~Wakka~

  2. #2
    se selezioni solo count(field), o altri raggruppamenti, senza estrarre altri campi mysql suppone che vuoi il raggruppamento su tutta la tabella con la condizione del where se espressa. Viene reso un solo record con il valore richiesto.

    Se selezioni anche altri campi che presumono ti rendano piu' tuple allora e' necessario dire alla query su cosa vuoi che venga effettuato il raggruppamento e questo lo farai con il group by, sempre ovviamente con la possibilita' di selezione con il where.

    In quest'ultimo caso per ogni tupla resa avrai anche il corrispondente valore richiesto.

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

  3. #3
    Originariamente inviato da piero.mac
    se selezioni solo count(field), o altri raggruppamenti, senza estrarre altri campi mysql suppone che vuoi il raggruppamento su tutta la tabella con la condizione del where se espressa. Viene reso un solo record con il valore richiesto.

    Se selezioni anche altri campi che presumono ti rendano piu' tuple allora e' necessario dire alla query su cosa vuoi che venga effettuato il raggruppamento e questo lo farai con il group by, sempre ovviamente con la possibilita' di selezione con il where. In quest'ultimo caso per ogni tupla resa avrai anche il corrispondente valore richiesto.
    .

    A dire il vero, a me interesserebbe fare il count di tab1 estrarre vari campi di tab2. In tab2 e' pero' presente solo un record, quindi comunque si tratterebbe di avere come array di ritorno qualcosa tipo:
    COUNT = 5
    campo1 = mario
    campo2 = rossi

    Dovrei usare il group by quindi?
    Non ho capito bene
    ~Wakka~

  4. #4
    ma la count() cosa deve contare? c'è qualcosa che lega quel "5" a "Mario Rossi"?

  5. #5
    Originariamente inviato da Wakka
    .

    A dire il vero, a me interesserebbe fare il count di tab1 estrarre vari campi di tab2. In tab2 e' pero' presente solo un record, quindi comunque si tratterebbe di avere come array di ritorno qualcosa tipo:
    COUNT = 5
    campo1 = mario
    campo2 = rossi

    Dovrei usare il group by quindi?
    Non ho capito bene
    Ripeto.

    se hai il solo count() allora va bene:

    select count(*) from table

    Se invece hai dei campi da estrarre e piu' tabelle allora:

    codice:
    select tab2.nome, tab2.cognome, count(tab1.campo_da_contare) as tot
    from table1 as tab1
    inner join table2 as tab2 ON tab1.id_tab2 = tab2.id
    group by tab2.nome, tab2.cognome
    Insomma se devi contare qualcosa devi dire qual'e' la logica con cui deve contare questo qualcosa.

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

  6. #6
    ma la count() cosa deve contare? c'è qualcosa che lega quel "5" a "Mario Rossi"? [/QUOTE]
    Niente! Nel mio caso il 5 e' il risultato del conteggio della tabella delle sessioni degli utenti, Mario Rossi e' estratto da un'altra tabella che non ha nulla che fare con la tabella 'sessioni'. Infatti ho una tabella 'variabili' in cui e' presente un solo record e vorrei estrarre pure alcune di queste variabili in un'unica query!


    Se invece hai dei campi da estrarre e piu' tabelle allora:

    codice:
    select tab2.nome, tab2.cognome, count(tab1.campo_da_contare) as tot
    from table1 as tab1
    inner join table2 as tab2 ON tab1.id_tab2 = tab2.id
    group by tab2.nome, tab2.cognome
    Come ho scritto sopra, nel mio caso le due tabelle sono slegate ed essendoci un solo record nella tabella 'variabili' non ho messo nemmeno un'id, altrimenti semplicemente avrei messo un id per soddisfare la condizione imposta da ON! Infatti pensavo di metterla, ma era per capire se c'era qualche alternativa concessa da mySQL per questo caso!

    Spero di aver spiegato meglio la mia situazione!
    ~Wakka~

  7. #7
    se sono slegate devi usare una UNION

    codice:
    SELECT MAX(campo1), MAX(campo2), MAX(campo3) FROM
    (
       SELECT COUNT(*) AS campo1, '' AS campo2, '' AS campo3 FROM tabella1
       UNION
       SELECT 0 AS campo1, NOME AS campo2, COGNOME AS campo3 FROM tabella2
    )
    AS T
    that easy!

  8. #8
    Originariamente inviato da Wakka
    Niente! Nel mio caso il 5 e' il risultato del conteggio della tabella delle sessioni degli utenti, Mario Rossi e' estratto da un'altra tabella che non ha nulla che fare con la tabella 'sessioni'. Infatti ho una tabella 'variabili' in cui e' presente un solo record e vorrei estrarre pure alcune di queste variabili in un'unica query!

    Come ho scritto sopra, nel mio caso le due tabelle sono slegate ed essendoci un solo record nella tabella 'variabili' non ho messo nemmeno un'id, altrimenti semplicemente avrei messo un id per soddisfare la condizione imposta da ON! Infatti pensavo di metterla, ma era per capire se c'era qualche alternativa concessa da mySQL per questo caso!

    Spero di aver spiegato meglio la mia situazione!
    La cosa e' un nonsenso. Hai una tabella con l'elenco dei nomi un'altra tabella con delle sessioni chiamiamole random senza legami con l'elenco dei nomi.

    Chiaro che dovrai fare due selezioni differenti, in una farai il conteggio senza riferimento alcuno mentre nell'altra sceglierai il nome che ti pare. Per fare un'unica query dovresti associare la sessione con l'id dell'utente che l'ha generata in modo da contare per ogni utente il numero delle sessioni utilizzate.

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

  9. #9
    se sono slegate devi usare una UNION
    Grazie, ho risolto! Grazie mille! Ora pero' ho un altro dubbio...con UNION unisco i due risultati.
    Cioe', nel risultato dellq query, unisco
    campo1.1 campo2.1 campo 2.2

    dove il primo 1 fa riferimento alla tabella, cosi' pure il primo 2.
    Se invece volessi un risultato del tipo:
    Array (
    [0] => array ( campo1.1 )
    [1] => array ( campo 2.1
    campo 2.2
    )
    )

    Cioe' in due array separati? E' possibile?
    ~Wakka~

  10. #10
    una UNION di due select corrisponde, guarda il caso, a due distinte SELECT ma con un solo result set. Quindi visto che ti servono risultati separati perche' non fai le due sacrosante select e ti gestisci il result set come ti pare senza vincoli di campo obbligati della union?


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

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 © 2026 vBulletin Solutions, Inc. All rights reserved.