Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di angelo85ct
    Registrato dal
    Dec 2007
    Messaggi
    322

    quale delle due query è piu' ottimale e corretta?

    1)

    Codice PHP:

        $contatore
    =mysql_query("SELECT COUNT(servizi.user) FROM servizi,struttura WHERE servizi.animale='1' and struttura.user=servizi.user and struttura.categoria='CasaVacanza' and servizi.provincia='$provincia' ")or die (mysql_error());
        
    $contatore1=mysql_fetch_array($contatore); 


    2)

    Codice PHP:

        $contatore
    =mysql_query("SELECT COUNT(servizi.user) FROM servizi INNER JOIN struttura WHERE servizi.animale='1' and struttura.user=servizi.user and struttura.categoria='CasaVacanza' and servizi.provincia='$provincia' ")or die (mysql_error());
        
    $contatore1=mysql_fetch_array($contatore); 
    Ragazzi, qual'è la query piu' corretta? quella con l'inner join o l'altra?

  2. #2
    beh, sarebbe "più corretto" se spostassi le condizioni di join nella join invece che nel where cosi da evitare un'inutile lavoro di associazione a mysql
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it L'avatar di angelo85ct
    Registrato dal
    Dec 2007
    Messaggi
    322
    ehm, cioè? mi faresti un'esempio?

  4. #4
    Originariamente inviato da daniele_dll
    beh, sarebbe "più corretto" se spostassi le condizioni di join nella join invece che nel where cosi da evitare un'inutile lavoro di associazione a mysql
    perfettamente d'accordo.

    comunque tra le due query esposte non ci sono differenze, una e' scritta nello stile definito theta mentre l'altra stile ansi.

    Nello stile ansi (piu' recente) e' previsti l'uso della clausola esterna nell'enunciato select, come suggerito da daniele, mentre nello stile theta (precedente) la clausola esterna della join e' messa giocoforza nel where.

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

  5. #5
    Utente di HTML.it L'avatar di angelo85ct
    Registrato dal
    Dec 2007
    Messaggi
    322
    scusate, ma allora quella con il join nella versione corretta come dovrebbe essere?

  6. #6
    Originariamente inviato da angelo85ct
    ehm, cioè? mi faresti un'esempio?
    L'esempio, e come potrai vedere, la forma ansi e' molto piu' leggibile dagli umani della forma theta

    codice:
    SELECT COUNT(servizi.user) 
    FROM servizi 
    INNER JOIN struttura  ON struttura.user=servizi.user
    WHERE servizi.animale='1' 
          and struttura.categoria='CasaVacanza' 
          and servizi.provincia='$provincia'
    direi che anche se c'e' una variabile php questo sia un argomento piu' attinente alla sezione database.

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

  7. #7
    Utente di HTML.it L'avatar di angelo85ct
    Registrato dal
    Dec 2007
    Messaggi
    322
    Originariamente inviato da piero.mac
    L'esempio, e come potrai vedere, la forma ansi e' molto piu' leggibile dagli umani della forma theta

    codice:
    SELECT COUNT(servizi.user) 
    FROM servizi 
    INNER JOIN struttura  ON struttura.user=servizi.user
    WHERE servizi.animale='1' 
          and struttura.categoria='CasaVacanza' 
          and servizi.provincia='$provincia'
    direi che anche se c'e' una variabile php questo sia un argomento piu' attinente alla sezione database.
    grazie piero.mac, ti posso fare due domande?
    1)
    cosa cambia facendo la query come hai fatto tu, con on e come l'ho fatta io?

    2)
    ma a allora la parte struttura.categoria='CasaVacanza' non va messa subito dopo l'on?



    Grazie

  8. #8
    Il where viene applicato a tutta la tabella (temporanea) che risulta prodotta dalla join.

    Questo gia' ti fa capire la diversa applicazione della condizione. La join produce una tabella temporanea (trasparente all'utente) dove sono presenti SOLO i record equi-join estratti dalla join e la condizione where lavorera' su un numero minore di record rispetto alla tabella completa.

    Ragionala in modo gerarchico:

    prima condizione e' che i record interessati siano riferiti tra loro dal campo comune, POI tra questi record verranno scelti solo quelli che corrispondono alla/alle condizione/i descritte nel where.

    Una query scritta come nell'esempio che ti ho messo sopra, rimane facilmente modificabile, ogni riga puo' essere tolta, modificata, aggiunta per qualsiasi regolazione o controllo della query stessa.

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

  9. #9
    si, la clausola di struttura nel where va spostata insieme all'altra

    sposto su database
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Originariamente inviato da piero.mac
    Il where viene applicato a tutta la tabella (temporanea) che risulta prodotta dalla join.

    Questo gia' ti fa capire la diversa applicazione della condizione. La join produce una tabella temporanea (trasparente all'utente) dove sono presenti SOLO i record equi-join estratti dalla join e la condizione where lavorera' su un numero minore di record rispetto alla tabella completa.

    Ragionala in modo gerarchico:

    prima condizione e' che i record interessati siano riferiti tra loro dal campo comune, POI tra questi record verranno scelti solo quelli che corrispondono alla/alle condizione/i descritte nel where.

    Una query scritta come nell'esempio che ti ho messo sopra, rimane facilmente modificabile, ogni riga puo' essere tolta, modificata, aggiunta per qualsiasi regolazione o controllo della query stessa.
    Beh, però scusa, benché immagino l'utente non abbia di questi problemi, facendo in questo modo la tabella temporanea che deriva dalla join è più grande

    Lavorando su set di dati di una certa dimensione queste variazioni si fanno sentire parecchio, no?
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.