Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Alessandro Pellizzari Newsgroups: it.comp.www.php Subject: Re: Associare caratteristiche identiche a prodotti diversi Date: Fri, 13 Apr 2018 10:31:16 +0100 Lines: 53 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net 5kl1jaObv8D/72+ppOe2zAlwZa7arL+91B+YBWdACPtbuRk4o= Cancel-Lock: sha1:STsqeVrn/WOQuXP5+Q0YM8EG8Lc= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 In-Reply-To: Content-Language: en-GB Xref: csiph.com it.comp.www.php:21976 On 13/04/2018 09:41, GabrieleMax wrote: > Nel creare una tabella in mysql ci sarebbe l'esigenza di associare > caratteristiche simili (pensiamo agli ingredienti dei prodotti che si > comprano al supermercato) a prodotti diversi. > Ad esempio in una tabella potrei inserire i valori "zucchero", "sale", > "farina", etc. e nel momento in cui inserisco un prodotto dovrei > associargli/inserire più valori (ovvero più ingredienti) obbligando però > l'utente a scegliere tra quelli disponibili. Sempre lo stesso trucco della tabella intermedia per le relazioni n:n Con l'aggiunta che, nella stessa tabella, puoi mettere informazioni aggiuntive. Per esempio: create table prodotto_ingrediente (id_prod int, id_ingr int, qta text); insert into prodotto_ingrediente values(123, 456, "100g") > Inserire gli ingredienti in un'apposita tabella mi permetterebbe anche > di tradurli in lingue diverse però credo che non si potrà lavorare a > livello di db ad esempio con delle FK per avere vincoli di integrità ma > bisognerà agire direttamente con uno script php che legga e proponga i > valori della tabella ingredienti. Definisci una tabella di ingredienti come "master language" (di solito inglese) e la fai come ho detto sopra. Poi definisci le tabelle di traduzione. create table ingredients(id primary key, name text, description text); create table ingredients_it_IT(id int references ingredients(id), name text, description text) Nota che l'id in quella di traduzione non è primary key, nè auto_increment: viene assegnata allo stesso valore della tabella ingredienti originale. In questo modo puoi avere il fallback della lingua automaticamente: select i.id, i.name, i.description, t.name as name_it, t.description as description_it from ingredients i left join ingredients_it_IT t on (i.id=t.id) Da PHP, se name_it è null, prendi name, e lo stesso con description. Puoi anche fare (left) join multilpe per avere tutte le traduzioni allo stesso tempo, ma questo te lo lascio come esercizio per casa. :P Bye.