Visualizzazione risultati 1 fino 3 di 3

Discussione: SQL: problema con query annidate

  1. #1
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito SQL: problema con query annidate

    Ho notato che phpMyAdmin è un po' restio a farmi eseguire questa "semplice" query:
    Codice:
    SELECT STANZE.Codice AS s_codice, STANZE.Titolo AS s_titolo, 
       STANZE.Descrizione AS s_descrizione, STANZE.Aperta AS s_aperta, 
       STANZE.StanzaSuperiore AS s_superiore, DISCUSSIONI.Codice AS d_codice, 
       DISCUSSIONI.Titolo AS d_titolo, MESSAGGI.Codice AS m_codice, 
       UTENTI.NrRegistrazione AS u_id, UTENTI.NomeUtente AS u_nome
    FROM STANZE
    LEFT JOIN (
       DISCUSSIONI
       INNER JOIN (
          MESSAGGI
          INNER JOIN UTENTI ON MESSAGGI.Autore = u_id
       ) ON d_codice = MESSAGGI.Discussione
    ) ON s_codice = DISCUSSIONI.Stanza
    WHERE m_codice
    IN (
       SELECT MAX( Codice ) 
       FROM MESSAGGI
       GROUP BY Discussione
    )
    Non ho trovato risposta nemmeno nella documentazione di MySQL, anzi, per come spiegato in questa pagina (http://dev.mysql.com/doc/refman/5.0/...ubqueries.html), sembra addirittura che la query sia corretta.

    Ho letto qui sul forum che AV non supporta le query annidate... ma è vero? E come posso fare per risolvere il problema?
    Ah, l'errore che phpMyAdmin mi è restituisce è un molto generico
    Codice:
    #1064 - You have an error in your SQL syntax.  Check the manual that corresponds 
    to your MySQL server version for the right syntax to use near 
    'SELECT MAX( Codice )  FROM MESSAGGI  GROUP BY Discussione  )  L
    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  2. #2
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    il supporto delle query annidate in mysql è stato introdotto a partire dalla versione 4.1... su altervista è disponibile la versione 4.0 (4.0.25 attualmente) (si era fatto un tentativo di passaggio verso la 4.1 ma erano emersi vari problemi con script pronti....)

    (anche se a prima vista sembra una caratteristica normalissima per un DBMS... se poi la si usa pesantemente ci si rende conto che è mooolto difficile ottimizzarla... e tanto vale usare tante query piccole separate... prevalentemente per ottenere prestazioni molto più alte grazie al caching dei query (query piccole: sempre le stesse... query grosse: tutte diversi... non è possibile fare caching efficace :P) )

    (PS: una query come quella che hai postato sopra immaginala su di un forum con 1.000.000 di messaggi.... passino i join... ma pensa poi un confronto "lineare" per vedere se i dati sono gli stessi che stanno nella sotto query... improponibile... :/ )
    Ultima modifica di Evcz : 08-12-2005 alle ore 19.18.26
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  3. #3
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Beh, quella mi pareva la query più complicata del mio forum: elencare codice, titolo, descrizione delle stanze, con indicatore se si può scrivere messaggi e quale sia la stanza che la contiene, oltre al codice e al titolo della discussione che contiene l'ultimo messaggio postato in una stanza riportandone codice, nome dell'autore e il suo numero di registrazione (traduci: la home page di vBullettin! :-D)

    Vabbè, mi metto il cuore in pace perché non si può fare direttamente 'sta cosa... peccato però...

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •