Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    [MYSQL] alternativa a left join

    il mio host non mi permette di eseguire query troppo complesse con left join tra tabelle con oltre 10.000 record...

    pensavo di raggirare il problema con una query selest del tipo

    select * from table WHERE (id=0 OR id=1 OR id=130 ... )

    e dentro la parentesi ci potranno stare anche migliaia di opzioni. Potrebbe funzionare oppure è una query troppo complessa? :master:
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Migliaia mi sembrano un po' tante.
    Non saprei...

  3. #3
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    Originariamente inviato da luca200
    Migliaia mi sembrano un po' tante.
    Non saprei...
    immaginavo, non mi toccherà mica fare tante query quanti sono gli id
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  4. #4
    Originariamente inviato da gasmor
    immaginavo, non mi toccherà mica fare tante query quanti sono gli id
    non puoi usare IN() ???

    where id in(1,2,130, ..... 1500.....)

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

  5. #5
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    Originariamente inviato da piero.mac
    non puoi usare IN() ???

    where id in(1,2,130, ..... 1500.....)
    ogni volta si impara qualcosa di nuovo

    non conosco questo tipo di query select, ma che tu sappia può supportare un migliaio di opzzioni tra le parentesi?
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  6. #6
    migliaia di or sono tante. quello che metti in IN() ha la stessa valenza dell'OR, ma con IN() la ricerca e' ottimizzata rispetto a tante OR.

    il limite e' quello definito in max allowed packet, di solito un mega.

    prova....

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

  7. #7
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    grazie, gentile ed efficace come sempre
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  8. #8
    Ciao,

    anche io credo che utilizzando l'opzione insiemistica IN il tutto sarà più efficiente, che mettere una clausola WHERE con tanti OR.

    Comunque controlla, se puoi, ovviamente da PHP, anche se ci sono tanti ID sequenziali cosi magari eviti di mettere troppi ID nella clausola IN(...) e metti dei controlli nella clausola WHERE per vedere se è contenuto nei sottointervalli


    ovvero qualcosa del genere:

    select * from table WHERE ((ID >= 3 AND ID <= 50) OR (ID >= 300 AND ID <= 320) OR ... OR IN(0, 130 ... ))


    E' vero che appesantisci, per vedere se ci sono ID sequenziali, per quanto riguarda lo script php ed il lavoro che deve fare il server, però forse ne vale la pena per avere più efficienza. Se le cose non possono andare, mi correggano gli altri.

  9. #9
    Dopo la Where o metti ad esempio Id=1 OR ID = 2 OR ID = 3... oppure metti ID IN (1,2,3..)
    è la stessa cosa, ma con l'istruzione IN è più semplice è chiara...
    Il problema è che tu ne devi mettere molti in tal caso potresti usare una query del tipo..

    SELECT * FROM TABELLA WHERE ID IN (SELECT ID FROM TABELLA2)

    in tabella 2 sono contenuti tutti gli ID che ti servono... non è escluso che tu possa usare la tabella primaria con qualche causael in più...

    Esempio

    SELECT * FROM TABELLA WHERE ID IN (SELECT ID FROM TABELLA WHERE CAMPO1 > 1000)
    Pubblicizza, Promuovi e Valuta il tuo sito su WebPortale
    Strategie e Consigli sul Gioco Manageriale di F1 GPRO GPRO STRATEGY
    Sito sulla Borsa con Gioco FantaBorsa Gioco-Borsa

  10. #10
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Hamlet75
    select * from table WHERE ((ID >= 3 AND ID <= 50) OR (ID >= 300 AND ID <= 320) OR ... OR IN(0, 130 ... ))
    ...poi un giorno inventarono il BETWEEN

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.