26 messaggi dal 14 febbraio 2003
Allora ... io ho una gestione delle form dinamica, creo le form e i dati vengono ovviamente salvati in una tabella sviluppata verticalmente!
Questi sono i campi dove vengonoo salvati i valori della form

id bigint(20) NOT NULL default '0', identifica un utente
idrifnome bigint(20) NOT NULL default '0', identifica il campo a cui fa riferimento l'id
valore varchar(255) NOT NULL default '', identifica il valore del campo inserito
esempio
tipo ...sulla tabella di creazione della form avrò

idrifnome = 1
nome = 'Nome'
idrifnome = 2
nome = 'Cognome'
idrifnome = 3
nome = 'Nazionalita'


Mentre sulla tabella valori avrò
id = 1
idrifnome = 1
valore='Marco'

id=1
idrifnome=2
valore='Rossi'

id=1
idrifnome=3
valore='Italy'

Ora sorge il problema ... devo fare una ricerca tipo ... tutti quelli che si chiamano Marco e che sono Italiani.
Come se fa?
P.S. Lavoro su un database Mysql.

Grazie anticipatamente
3.122 messaggi dal 16 maggio 2002
Che strana scelta che hai adottato per la struttura del database.. Sarebbe stato più semplice, immediato e performante mettere nella tabella gli attributi Nome, Cognome, Nazionalità...
Comunque, se questa è stata la tua scelta, la query si può scrivere in questo modo non molto intuitivo però (occorre usare alias di tabella):
SELECT DISTINCT id
FROM tabella T1 INNER JOIN tabella T2
ON T1.id=T2.id
WHERE T1.idrifnome=1
AND T1.valore='Marco'
AND T2.idrifnome=3
AND T2.valore='Italy'

Ripeto comunque che ti consiglio di cambiare la struttura della tua tabella.

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
2.584 messaggi dal 14 maggio 2001
non puoi cambiare la struttura del db in modo da avere un record e non tre record ogni volta?

Ad occhio con la tua struttura le ricerche diventano iper-complesse...
Dovresti fare:
SELECT Count(Id) AS Conteggio, Id GROUP By Id WHERE (valore='Marco' OR valore='Italy') AND Conteggio=2

In pratica ricerchi tutti gli Id che hanno o l'una o l'altra condizione e poi ne fai il conteggio perché a te servono quando entrambe sono verificate... a quel punto hai solo l'Id...
26 messaggi dal 14 febbraio 2003
Io cambierei la struttura della query, ma poi non avrei più una creazione delle form dinamica! Cioè .. se io oggi voglio aggiungere il campo Provincia .. cliccko un bottone e sono apposto!
Tutte le form sono dinamiche percui è abbastanza logico avere una struttura sviluppata verticalmente
26 messaggi dal 14 febbraio 2003
P.s. Grazie per le risposte che mi avete dato
3.122 messaggi dal 16 maggio 2002
Bè, non ci vuole molto ad eseguire una
ALTER TABLE tabella ADD COLUMN Provincia VARCHAR(20)

Inoltre con il tuo sistema non puoi utilizzare indici separati e, ripeto, le query risultano essere poco performanti.

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
superblood ha scritto:
è abbastanza logico avere una struttura sviluppata verticalmente


?!?!?!?!?!?!?!
Io la definirei piuttosto "negazione della teoria relazionale"...

Bye
26 messaggi dal 14 febbraio 2003
@seoman

Ho provato una query tipo la tua...
SELECT
id
FROM
valoricampi
WHERE
Count(id)=2 AND
(
(idrifnome=25 AND LCASE(valore)='italia')
OR
(idrifnome=24 AND LCASE(valore)='marco')
)
GROUP By id

---------------------

però il buon MySQL mi risponde con un errore:

Messaggio di MySQL:
Invalid use of group function

...qualche idea?

Grazie in anticipo.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.