Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709

    [MySQL] multipli INNER JOIN

    Ho una query del tipo:

    Codice PHP:
       SELECT FROM a
          INNER JOIN b ON a
    .b.AND a.b.AND a.'z'
       

    prendendo un esempio pratico in un caso impiega 0.10" ca. per 21 righe di risultato.
    Devo incrociarla con una terza tabella, tipo:

    Codice PHP:
       SELECT FROM a
          INNER JOIN b ON a
    .b.AND a.b.AND a.'z'
          
    INNER JOIN c ON b.c.t
       

    nel caso di cui sopra impiega 40.20" ca. per 8 righe di risultato!
    Variando l'ordine e l'accorpamento dei JOIN non cambia di molto. Se invece faccio la prima SELECT salvando il risultato e poi la seconda SELECT incrociando tale risultato con la terza tabella resto nell'ordine di tempo di 0.15" ca.

    Il problema è che per salvare il risultato devo fare una gestione particolare in quanto il DB è interrogato da n persone, dunque bisogna stare attenti ai conflitti.

    Se qualcuno ha avuto a che fare con JOIN multipli mi piacerebbe sentire un consiglio.

    DBMS di riferimento: MySQL 3.23 (non supporta roba tipo SELECT * FROM (SELECT...), altrimenti era tutto più semplice...)

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    (up)

  3. #3
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Gli attributi che usi per i JOIN sono chiavi primarie o indici?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    indici

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    (up)

  6. #6
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    La sintassi che hai usato non è proprio corretta.
    Per la prima:

    SELECT *
    FROM a INNER JOIN b
    ON a.x = b.x AND a.y = b.y
    WHERE a.z = 'z'

    Per la seconda:

    SELECT *
    FROM (a INNER JOIN b ON a.x = b.x AND a.y = b.y) INNER JOIN c ON b.t = c.t
    WHERE a.z = 'z'

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    sì, la sintassi logica è quella indicata, ma in realtà funziona anche il primo metodo: si tratta di un mio espediente e consente di fare una "selezione a monte" di alcune righe, tant'è che correggendo le query nel modo indicato diventano ancora più lente!

    In ogni caso non ho ancora risolto.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    attenzione: per quanto riguarda la soluzione che ho adottato (funzionante) di salvare un primo risultato in una tabella temporanea, qualcuno ha mai usato un metodo del genere? In particolare avrei bisogno di evitare conflitti nel caso di accessi simultanei (quindi sto pensando di usare come nome della tabelle temporanea un prefisso+timestamp).

    Spero che qualcuno abbia avuto a che fare con roba del genere per un piccolo consiglio...

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.