• User Newbie

    [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..


  • User

    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)


  • Super User

    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. 🙂


  • User Newbie

    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..


  • Super User

    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 :ciauz: