Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: INNER JOIN complesso

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234

    INNER JOIN complesso

    Ciao ragazzi..
    ho un problema nel fare un INNER JOIN..
    leggendo qua e là nel forum ed in internet ho trovato vari esempi che non riesco però ad adattare al mio caso..

    Provo a ricapitolare:

    Nella tabella prodotti ho i seguenti campi:
    artp - artp2 - artp3 - artp4 - artp5
    nei quali sono inseriti dei numeri..

    Questi numeri sono abbinati ad un nome artista però determinato in un altra tabella!

    Infatti nella tabella artisti ho i campi:
    idar e nomear
    rispettivamente il numero e il nome associato!

    Con l'inner join che ho ora nel mio php riesco a dirgli che artp è uguale a idar in questo modo:
    codice:
    FROM prodotti AS A INNER JOIN artisti = B
    			ON A.artp = B.idar
    e poi stampo il risultato in questo modo:
    codice:
    $output .='&artista'.$i.'='.$prodotti['nomear'];
    Dato che voglio stampare nel mio stesso campo di testo variabile (sono in Flash ma poco importa credo) eventuali collaborazioni di artisti come ad esempio ARTISTA 1 & ARTISTA 2....cioè artp & artp2

    Dovrei penso fare un nuovo INNER JOIN dicendogli che anche i campi artp2, artp3 ecc.. della tabella prodotti sono da linkare a idar della tabella artisti..
    e poi stamparli nello stesso otput più o meno così...
    codice:
    $output .='&artp'.$i.'='.$prodotti['nomear']. " ".urlencode($prodotti['divarp1']). " ".$prodotti['artp2']. " ".urlencode($prodotti['divarp2']). " ".$prodotti['artp3']. " ".urlencode($prodotti['divarp3']). " ".$prodotti['artp4']. " ".urlencode($prodotti['divarp4']). " ".$prodotti['artp5'];
    dove questi ovviamente sono spazi
    codice:
    . " "
    e dove questi invece sono campi di divisione tra i nome artista come ad esempio &, vs..
    codice:
    .urlencode($prodotti['divarp1'])
    Come posso fare questo INNER JOIN?
    Grazie Bonjo

  2. #2
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Codice PHP:
    FROM prodotti AS A INNER JOIN artisti B
                ON 
    (A.artp B.idar AND A.artp2 B.idar AND A.artp3 B.idar AND A.artp4 B.idar AND A.artp5 B.idar
    no?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234
    Ciao Il_Drugo!!!

    Ci avevo già provato e mi da questo errore:

    Errore di sintassi nella query SQL vicino a '.idar, A.artp3 = B.idar, A.artp4 = B.idar, A.artp5 = B.idar WHERE A.idcat l' linea 3

    Hai modificato il post..?
    Anche così non funziona..mi restituisce tot=0

  4. #4
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Si l'ho editato perchè avevo usato una concatenazione errata

    Cmq è strano, ti direi di provare a sostituire gli AND con gli OR ma è un tentativo a caso, tanto per vedere cosa ti restituisce.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234
    Con gli or ci ho provato e mi duplica tutti i risultati dove è presetnte il secondo artista..tra l'altro senza sostituire il numero del artp2 con il nomear..

  6. #6
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Forse ti conviene fare tutto questo con 2 query distinte.

    Selezioni la riga che ti serve, ne estrai i 5 valori degli artisti.

    Poi esegui una seconda query dalla tabella degli artisti e usando l'array con gli ID numerici di prima estrai i nomi corretti degli artisti.

    Non è professionale, ma verament enon saprei come fare tutto con una query se un AND JOIN non funzia....

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234
    mmm..non so..
    forse c'è un altro modo per scrivere l'AND!?
    Non so..una cosa così..

    codice:
    ON A.artp AND A.artp2 AND A.artp3 AND A.artp4 AND A.artp5 = B.idar
    ovviamente questa non funziona!

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    Ciao, l'inner join con l'or non è proprio corretto
    dovresti fare una cosa tipo (la sintassi è a memoria)
    Codice PHP:
    select prodotti.*,a.nomear as nomear1,b.nomear as nomear2 ,c.nomear as nomear3 ...
    from prodotti inner join artisti  a 
                ON 
    (artp a.idar ), left join artisti b  ON (artp2 b.idar ), left join artisti c  ON (artp3 c.idar ), ....... 

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    234
    In sostanza io come output do questo:
    codice:
    $output .='&artista'.$i.'='.$prodotti['artp1']. " ".urlencode($prodotti['divarp1']). " ".$prodotti['artp2']. " ".urlencode($prodotti['divarp2']). " ".$prodotti['artp3']. " ".urlencode($prodotti['divarp3']). " ".$prodotti['artp4']. " ".urlencode($prodotti['divarp4']). " ".$prodotti['artp5'];
    se nella mia tabella prodotti nei campi artp2, artp3 ecc.. ci sono dei numeri mi devi andare a stampare il corrispondente del numero presente nella tabella artisti..dove idar è il numero e nomear il nome da stampare..
    Se no mi stampa solamente il primo artista artp..

    Confido in una soluzione..

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    :rollo:

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 © 2024 vBulletin Solutions, Inc. All rights reserved.