Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [MySQL] Dubbi su molteplicità di JOIN

    Ciao ragazzi,
    ho un catalogo di gioielleria in PHP/MySQL con 1 tabella di articoli, 1 di materiali (oro, argento..), 1 di pietre (brillanti, rubini,...) e 2 tabelle con le associazioni di materiali e pietre agli articoli.
    Ho bisogno di consentire all'utente di filtrare i risultati (un solo materiale e/o pietra alla volta!).
    Un esempio che mi viene chiesto di ricalcare è l'attuale catalogo Damiani (http://www.damiani.com/it/products/collections/jewelry/)
    Nessun problema se viene impostato uno solo dei filtri:

    codice:
    SELECT 
    catalogo.ID_Articolo, 
    catalogo.ID_Cat, 
    catalogo.Codice, 
    ass_pietre.ID_Articolo 
    FROM catalogo 
    INNER JOIN ass_pietre 
    ON catalogo.ID_Articolo=ass_pietre.ID_Articolo 
    WHERE ID_Cat='x' AND ID_Pietra='y'
    Per la mia competenza il problema sorge se l'utente desidera restringere la ricerca sia per pietra che per materiale e se la query va estesa anche alla tabella 'ass_materiali' (perché l'utente mi fornisce anche 'ID_Materiale').

    Serve forse un tipo di JOIN multiplo (o si dice multipla?) per selezionare solo gli articoli del catalogo presenti su entrambe le tabelle di associazioni?

    (Sul sito Damiani se si seleziona il materiale 'ceramica', solo alcune 'pietre' restano disponibili; ma a me non interesserebbe interrogare ulteriormente il db).

    Grazie per le indicazioni che potrete fornirmi ed un saluto cordiale.
    Dario

  2. #2
    E' semplicemente una concatenazione di join:

    SELECT
    catalogo.ID_Articolo,
    catalogo.ID_Cat,
    catalogo.Codice,
    ass_pietre.ID_Articolo
    FROM catalogo
    INNER JOIN ass_pietre
    ON catalogo.ID_Articolo=ass_pietre.ID_Articolo
    INNER JOIN ass_materiali
    ON caralogo.ID_Articolo=ass_materiali.ID_Articolo
    WHERE ID_Cat='x' AND ID_Pietra='y' AND ID_Materiale='z'

    (ho usato inner join perché l'hai fatto tu, se non sei assolutamente sicuro che ci sia una corrispondenza dovresti usare LEFT JOIN)

    (consiglio anche di aggiungere le chiavi esterne del caso)
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  3. #3
    Ti ringrazio per la soluzione risolutiva che mi hai suggerito e per gli spunti di approfondimento che sto già affrontando!

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.