Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    370

    count senza tenere conto del limit in query mysql

    in un select in mysql al quale viene specificato un LIMIT è possibile ottenere il valore di quante righe sarebbero state ottenute se non ci vosse stato il LIMIT?

    se faccio nun_rows dopo la query mi ritorna solo il numero di righe in base al LIMIT

    esempio

    SELECT * FROM PRODOTTI WHERE CLASSE = 1 LIMIT 0,5

    MI RITORNERA 5 IL NUM_ROWS MA IO VORREI SAPERE TUTTE LE RIGHE QUANTE SONO? (SENZA FARE DUE INTERROGAZIONI) E POSSIBILE ESISTE IN MYSQL UN COUNT CHE NON TENGA CONTO DEL LIMIT?

    GRAZIE

  2. #2
    Puoi usare COUNT(*) ma dovrai raggruppare il conteggio su qualcosa..

    codice:
    SELECT *, COUNT(*) AS tot 
    FROM PRODOTTI 
    WHERE CLASSE = 1 
    GROUP BY CLASSE
    LIMIT 0,5
    nelle condizioni LIMIT e' l'ultimo. Questo significa che deve comunque fare TUTTE le altre operazioni, e poi si limita ad inviare il risultato. Le righe ha dovuto comunque estrarle tutte. Se conti le righe estratte ovviamente saranno solo 5.

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    370
    grazie e proprio quello che credevo fosse possibile fare ok fa benissimo

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    370
    NON E' QUELLO CHE VOGLIO COSI ME LI RAGGRUPPA A ME NON SERVONO RAGRUPPATI IO VOGLIO SAPERE SOLO QUANTI SONO I RECORD MA I RECORDI MI SERVONO DEVONO STAMPARLI A VIDEO POI CON FETCH_ARRAY

    OK?

    GRAZIE

  5. #5
    [supersaibal]Originariamente inviato da vecchioste
    NON E' QUELLO CHE VOGLIO COSI ME LI RAGGRUPPA A ME NON SERVONO RAGRUPPATI IO VOGLIO SAPERE SOLO QUANTI SONO I RECORD MA I RECORDI MI SERVONO DEVONO STAMPARLI A VIDEO POI CON FETCH_ARRAY

    OK?

    GRAZIE [/supersaibal]
    Guarda che ti e' rimasto incastrato il tasto caps lock.....



    allora devi fare due query. la prima conta e la seconda estrae.

    select count(*)

    select *



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

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    370
    si ma io non volevo farne due

  7. #7
    [supersaibal]Originariamente inviato da vecchioste
    si ma io non volevo farne due [/supersaibal]
    Se sapere il numero complessivo di righe ti serve per la paginazione e' giocoforza farne due, se il num. tot. di righe ti serve per il LIMIT. Altrimenti non ti serve sapere il numero di righe per il while. Quello va per conto suo finche' c'e' ne uno...

    Oppure trova un campo per il raggruppamento che sia l'ideale per quello che ti serve.



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

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    370
    e piu pesante ottenere un resultato grosse o fare due query una count e una limit?

    era solo questo il mio (problema)

  9. #9
    [supersaibal]Originariamente inviato da vecchioste
    e piu pesante ottenere un resultato grosse o fare due query una count e una limit?

    era solo questo il mio (problema) [/supersaibal]
    La query con solo count(*) e' in pratica la piu' rapida in assoluto perche' si limita a leggere quanti sono.

    Il LIMIT non alleggerisce nulla della query perche' mysql deve comunque valutare tutte le condizioni, tra cui l'ordinamento e poi il sender mandera' solo la quantita' richiesta a disposizione in memoria. Quindi piu' che a velocizzare la query LIMIT serve per agevolare le paginazioni ed a limitare l'occupazione inutile di memoria con dati che non saranno mai utilizzati.

    Ti ripeto che se la quantita' ti serve per la paginazione, dovrai sempre fare prima il conteggio dei record che andrai ad utilizzare pagina per pagina e poi andrai ad estrarre i dati impostandone il LIMIT. count(*) sembra fatto apposta ma non e' utilizzabile nella stessa query di estrazione dei dati.


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

  10. #10
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    [supersaibal]Originariamente inviato da piero.mac
    La query con solo count(*) e' in pratica la piu' rapida in assoluto perche' si limita a leggere quanti sono.
    [/supersaibal]
    aggiungo che questo è vero se la tabella è MyISAM...se fosse InnoDB il conteggio porterebbe via molto più tempo


    per il resto sottoscrivo quanto già scritto da piero
    think simple think ringo

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.