Visualizzazione risultati 1 fino 9 di 9

Discussione: Inner join tre tabelle

  1. #1
    Guest

    Predefinito Inner join tre tabelle

    Ciao ragazzi, questo è il mio primo post in questo forum. Sto spostando il mio sito su altervita e già che ci sono lo sto aggiornando un pò.

    Ho dei problemi con questa query:
    Codice:
    "SELECT tabella1.id AS id FROM tabella1 AS tab1 WHERE tab1.type = 'ordine' INNER JOIN tabella2 AS tab2 ON tab2.id_user1 = tab1.id_user WHERE tab2.id_user2 = '$userid' INNER JOIN tabella2 AS tab3 ON tab3.id_user2 = tab1.id_user WHERE tab3.id_user1 = '$userid' AND tab3.category = tab1.category";
    Quando la eseguo mi restituisce questo errore.
    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 'INNER JOIN' at line 1
    Ultima modifica di alemoppo : 30-10-2011 alle ore 14.52.44 Motivo: +tag [code]

  2. #2
    Guest

    Predefinito

    La sintassi corretta è

    Codice:
    SELECT campi
    
    FROM tabella1
    INNER JOIN tabella2 ON tabella1.id = tabella2.id
    INNER JOIN tabella3 ON tabella3.id = tabella1.id
    ...
    INNER JOIN tabellan ON tabellax.id = tabellan.id
    
    WHERE condizioni
    ...
    dove devi sistemare le relazioni di join

  3. #3
    Guest

    Predefinito

    Ciao scusa la domanda la sintassi è la stessa anche se devo fare due controlli sulla stessa tabella?

    Nel senso posso fare due inner join sulla stessa tabella e uno su una terza?
    Ultima modifica di mysolution : 30-10-2011 alle ore 18.49.31

  4. #4
    Guest

    Predefinito

    Puoi fare tutti i join che vuoi

    quello che sarà unica è la parte WHERE

    Non puoi avere più WHERE in un'istruzione SQL.

    In un'unica WHERE devi accentrare tutte le condizioni, facendo riferimento alle tabelle opportune

    tabellaX.campo, tabellaY.campo

  5. #5
    Guest

    Predefinito

    Stai sbagliando sintassi: in WHERE non ci vogliono le virgole come nell'ORDER, ma ci vuole l'operatore AND o OR, usando le parantesi per le precedenze ed i raggruppamenti di questi; es:
    Codice:
    WHERE tabellaX.campo = '' OR|AND tabellaY.campo = ''
    In ogni caso dipende da cosa devi fare, magari non è nemmeno utile la INNER.


  6. #6
    Guest

    Predefinito

    Ancora una cosa, devo fare un inner join e come vi ho detto devo richiamare due volte la stessa tabella.
    Come faccio ad assegnare condizioni diverse?
    Ultima modifica di mysolution : 30-10-2011 alle ore 22.51.35

  7. #7
    Guest

    Predefinito

    Usando gli alias, esempio:
    Codice:
    [...] INNER JOIN tabella AS t ON [...]
    o
    Codice:
    [...] INNER JOIN tabella t ON [...]
    poi davanti al campo, metti l'alias scelto ed un punto, esempio:
    Codice:
    [...] INNER JOIN tabella t ON [...] WHERE t.campo = ''

  8. #8
    Guest

    Predefinito

    Così quindi dovrebbe funzionare?

    Codice PHP:
    "SELECT tabella1.id AS id FROM tabella1 INNER JOIN tabella2 AS tab2 ON tab2.id_friend = tabella1.id_user INNER JOIN tabella3 AS tab3 ON tab3.id_user = tabella1.id_user WHERE tabella1.type = 'post' AND tab2.id_user = '$userid' AND tab3.id_friend = '$userid' AND tab3.id_category = tabella1.id_category"

  9. #9
    Guest

    Predefinito

    Nella SELECT, non c'è bisogno d'inserire il nome della tabella, o usi gli alias se hai lo stesso nome del campo in due tabelle oppure lo ometti.

    Questa dovrebbe funzionare:
    Codice:
    "SELECT id
    FROM tabella1 AS tab1
    INNER JOIN tabella2 AS tab2
    	ON (tab2.id_friend = tab1.id_user)
    INNER JOIN tabella3 AS tab3
    	ON (tab3.id_user = tab1.id_user)
    WHERE tab1.type = 'post'
    	AND tab2.id_user = '$userid'
    	AND tab3.id_friend = '$userid'
    	AND tab3.id_category = tab1.id_category"
    L'ho indentata per una facile lettura, così capisci meglio la "gerarchia".


Regole di scrittura

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