più numeri in uno stesso campo

Ho un database formato da 2 tabelle

clienti dove all'interno ho vari campi (idcliente - ........)

causa dove all'interno ho vai campi (idcausa - Idcliente - ........)

Per una causa possono esserci + clienti.

Avevo pensato di fare una cosa del genere per quanto riguarda i clienti.

(supponiamo che x una causa ci sono 3 persone )

Inserisco prima i dati dei clienti avrò 3 record Idcliente:

idcliente = 1 idcliente = 2 idcliente = 3 con i rispettivi dati

Adesso quando passo alla causa vorrei inserire nel campo Idcliente della tabella cause

tutti e 3 i record Idcliente precedentemente inseriti.

Come posso inserire in uno stesso campo + numeri tipo 1,2,3 per poi richiamarli???

Spero di essermi spiegato

 :bye:

inviato 9 anni fa
leoneweb
X 0 X

L'approccio che proponi non è corretto. In una relazione molti-a-molti bisogna utilizzare 3 tabelle:

1) clienti (idcliente,...)

2) causa (idcausa,...)

3) clienti-causa (idcliente, idcausa)

il legame tra clienti e cause va inserito nella tabella clienti-causa

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

quindi se x una causa avrò 3 clienti

la tabella clienti-causa risulterà

idcliente--idcausa
     1   ----  3
     2  -----  3
     3  -----  3       

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

si, così si capisce che la causa 3 è legata ai clienti 1, 2 e 3

questo approccio è quello corretto e ti permette di fare delle JOIN per recuperare tutti i clienti di una causa o tutte le cause di un cliente

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

allora mi sono creato le 3 tabelle cliente -causa - clientecausa

1° tabella (cliente): idcliente - .........

2° tabella (causa) : idcausa - tipo_causa - ......

3° tabella (clientecausa) : id - idcliente - idcausa - tipo_causa

Adesso sto cercando di tirarmi fuori solo le cause riferite al tipo e numero di causa o a un certo tipo di cliente

SELECT * FROM clientecausa INNER JOIN causa ON clientecausa.idcausa=causa.numero_pratica INNER JOIN cliente ON clientecausa.idcliente=cliente.idcliente WHERE 
((clientecausa.tipo_causa='$tipo_causa'AND clientecausa.idcausa='$num_caus')OR(clientecausa.idcliente='$hiddenField'))

ma stò brancolando nel buio

che ne dite???

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

La terza tabella non ha bisogno di un suo id poiché la coppia idcliente - idcausa è la vera chiave primaria. Inoltre l'attributo tipo_causa deve stare in quella tabella SOLO se per una stessa causa un cliente può considerare la causa con un tipo causa diverso da quello che vede un'altro cliente, altrimenti quell'attributo deve stare nella tabella delle cause.

Ad esempio se ho una tabella attori e film, per collegare gli attori ai film uso una tabella attori-film, nella quale metto un attributo "ruolo" poiché ciascun attore in un particolare film recita in un particolare ruolo, mentre metto l'attributo "genere film" nella tabella dei film poiché il genere non dipende dall'attore ma solo dal film.

Alla luce di quanto ti ho detto quindi qual'è la corretta struttura delle tabelle?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

un cliente può avere più cause con tipo_cause differenti ecco xchè l'ho messo anche nella 3 tabella

risposto 9 anni fa
leoneweb
X 0 X

Se tipo_cause è legato contemporaneamente sia al cliente che alla causa allora ok. Se però tipo_cause dipende solo dalla causa, nel senso che il tipo_cause è lo stesso per tutti i clienti se si considera una causa in particolare allora va messo nella tabella "causa".

Per selezionare tutte le cause dell'utente con id pari a 254:

[tt]SELECT *

   FROM

      clientecausa, causa

   WHERE

      clientecausa.idcausa = causa.idcausa AND

      clientecausa.idcliente = 254[/tt]

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

un cliente può avere più cause in corso e il tipo_cause può assumere il valore 'PG', 'PS', 'CS', 'CG', 'S'

ora un cliente può avere

numero_causa = 1 tipo_causa = S

numero_causa = 3 tipo_causa = PS

se mi voglio estrarre tutte le cause riferito all'idcliente in questo caso mi deve restituire

tutte e due

numero_causa = 1 tipo_causa = S

numero_causa = 3 tipo_causa = PS

risposto 9 anni fa
leoneweb
modificato 9 anni fa
X 0 X

ho partorito questa e sembra funzionare che ne dici??

SELECT * FROM clientecausa INNER JOIN causa ON clientecausa.idcausa=causa.numero_pratica INNER JOIN cliente ON clientecausa.idcliente=cliente.idcliente AND clientecausa.tipo_causa=causa.tipo_causa AND ((clientecausa.tipo_causa='$tipo_causa' AND clientecausa.idcausa='$num_caus')OR(clientecausa.idcliente='$hiddenField'))

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

ma esattamente cosa vuoi ottenere?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Tirarmi fuori solo le cause riferite a quel cliente con (clientecausa.idcliente='$hiddenField')

o l' ultima causa inserita con (clientecausa.tipo_causa='$tipo_causa'

AND clientecausa.idcausa='$num_caus')

SELECT * FROM clientecausa 
INNER JOIN causa ON clientecausa.idcausa=causa.numero_pratica 
INNER JOIN cliente ON clientecausa.idcliente=cliente.idcliente 
WHERE clientecausa.tipo_causa=causa.tipo_causa 
AND ((clientecausa.tipo_causa='$tipo_causa' 
AND clientecausa.idcausa='$num_caus')
OR(clientecausa.idcliente='$hiddenField')) 
ORDER BY clientecausa.idcausa

mi sembra che questa query vada bene

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

per prima cosa dividi la query in 2 query separate

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda