- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- [php-mysql] query complicata o sono io il pollo....??
-
[php-mysql] query complicata o sono io il pollo....??
salve a tutti..
ho bisogno del vostro aiuto..
ho una tabella fatta cosi:
step | idchesceglie | idscelto
1 1 2
1 2 1
1 3 4
1 4 3
1 1 2
2 2 5
2 4 6
2 6 4
avrei biogno di sapere nel corso degli step(prima colonna) quante volte le
coppie di valori delle colonne idchesceglie e idscelto, risultano essere
reciproche.. per reciproche intendo dire del tipo: step1, 1 sceglie 2 e 2
sceglie 1, 3 sceglie 4 e 4 sceglie tre..per es. in quanti step 1 2 è reciproco? nella tabella di esempio allo step1,
1 2 è reciproco, allo step 2 no!!il risultato finale dovrebbe essere più o meno questo:
per ogni coppia di valori id
sapere in quanti (non occorre sapere quali) step le scelte sono state
reciproche, percui per es.:1 2 [quantità di step dove nello stesso step cè anche 2 1]
3 4 [quantità di step dove nello stesso step cè anche 4 3]
come inizio, stò provando anche solo per una singola coppia di valori
tramite sql senza script php...con una subquery del tipo:
select step from tabella where idchesceglie=1 and idscelto=2
and exists (select step from tabella where idchesceglie=2 and idscelto=1)
ma il risultato pare far riferimento solo alla prima select..
spero di essermi spiegato..
qualche idea????? di qualsiasi tipo.... script php, altri linguaggi.. a me
basta che poi funzia..grazie a tutti..
-
Se ho capito quello che ti serve, questo dovrebbe andare
SELECT step
FROM tabella
WHERE
idchesceglie IN (valore_id1, valore_id2)
AND
idscelto IN (valore_id1, valore_id2)
-
probabilmente ragionando con comandi tipo union o qualcosa del genere si riesce a risolvere con una query sola ma ... di primo acchito l'unica soluzione è una piccola elaborazione.
con la parola chiave distinct estrapoli tutte le serie in modo univoco, ne calcoli il reciproco e per ogni serie verifichi l'esistenza del reciproco.
se mi viene in mente come farlo con una query sola torno a risponderti.
-
vi ringrazio per le risposte:
SELECT step
FROM tabella
WHERE
idchesceglie IN (valore_id1, valore_id2)
AND
idscelto IN (valore_id1, valore_id2)questo mi ristituisce tutti gli step dove idchesceglie ha valore_od1 e valore_id2 e idscelto ha volore_id1 e valore_id2. io ho bisogno solo degli step in cui idchesceglie-idscelto sono reciproci..
con la parola chiave distinct estrapoli tutte le serie in modo univoco, ne calcoli il reciproco e per ogni serie verifichi l'esistenza del reciproco.
potresti farmi un esempio pratico.. grazie a tutt..
-
ho sbagliato, non con il distinct ma con il group by:
select step, idscelto, iddascegliere from tabella group by step, idscelto, iddascegliere
in questo modo hai solo un'occorrenza delle eventuali serie che si ripetono