Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [MYSQL] JOIN OCN PIù condizioni

    SELECT agenzie.id AS id
    FROM agenzie
    INNER JOIN freelance_associazioni ON freelance_associazioni.id_freelance=agenzie.id AND freelance_associazioni.id_sottocategoria = '239' AND freelance_associazioni.id_sottocategoria = '194'
    GROUP BY agenzie.id ORDER BY data_attivazione DESC, agenzie.ragione_sociale ASC LIMIT 0,20

    salve in questa query voglio visualizzare tutte le agenzie che hanno sia freelance_associazioni.id_sottocategoria= 239 e 194. la query non mi funziona penso perchè ovviamente freelance_associazioni.id_sottocategoria può avere un solo valore. con la condizione OR non va bene perchè a me interessa che siano vere entrambe le condizioni.
    come posso fare?

  2. #2
    così

    freelance_associazioni.id_freelance=agenzie.id AND (freelance_associazioni.id_sottocategoria = '239' OR freelance_associazioni.id_sottocategoria = '194')


    oppure

    freelance_associazioni.id_freelance=agenzie.id AND freelance_associazioni.id_sottocategoria IN ('239', '194')

  3. #3
    non va bene così perchè nel tuo esempio il valore può essere 0 239 o 194, mentre io voglio che abbia entrambi i valori

  4. #4
    e, di grazia, dove lo vedi lo 0?

    la hai almeno provata? deduco di no....

  5. #5
    lo 0 è un errore di ortografia, non ho bisogno di provarla perchè la condizione OR intende che il valore può essere "239" o "194". io voglio che deve essere una AND ma ovviamente neanche può funzionare perchè una condizione può assumere una condizione o l'altra. bisogna inventare uno strataggemma.
    io ho fatto così
    INNER JOIN freelance_associazioni ON freelance_associazioni.id_freelance=agenzie.id AND freelance_associazioni.id_sottocategoria = '239'
    INNER JOIN freelance_associazioni ON freelance_associazioni.id_freelance=agenzie.id AND freelance_associazioni.id_sottocategoria = '194'

    funziona come voglio ma non mi sembra elegante

  6. #6
    pardon, non si capiva benissimo che volevi tutti i risultati su una stessa riga del resultset

    l'unico modo, in questo caso, è fare più join della stessa tabella con le condizioni differenti

    però, personalmente, preferisco gestire la situazione a livello "verticale" e non "orizzontale" perché, già adesso, devi assegnare un alias ai campi visto che hanno lo stesso nome e se per caso aggiungi altre join con la stessa tabella la cosa aumenta

    se invece fai una sola join e quindi estrai più record puoi gestire la cosa a livello di codice con estrema semplicità

    la logica in pseudo codice è

    codice:
    ROWLIST = LISTA;
    while ROW in RESULTSET
        if ROWLIST NOT CONTAIN_KEY ROW.ID
            ROWLIST ADD ROW.ID, ROW
        end
        ROWLIST.SUBAGENZIA ADD ROW.SUBAGENZIAID ROW
    end
    ho molto semplificato, ovviamente non ha senso reinserire 2 volte la riga per intero, prendi solo i valori che ti interessano

    per fare un esempio pratico, se usi php

    codice:
    $rowlist = array();
    while($row = mysql_fetch_obj($resultset)
    {
        if (isset($rowlist[$row->id]) == false)
        {
            $rowlist[$row->id] = $row;
            $rowlist[$row->id]->subagenzie = array();
        }
        
        $rowlist[$row->id]->subagenzie[$row->subagenziaid] = $row;
    }
    come per il pseudo (incomprensibile) codice, qui butto dentro tutto $row ma non ha senso

    il principio è molto semplice, $rowlist conterrà i dati indicizzati per la chiave primaria (se non ne hai componi una chiave unica discriminante in base ai dati del record) e poi crei una ulteriore hashtable (php non fa tanta distinzione a livello di dichiarazione) ed indicizzi i valori delle subagenzie sempre in base alla loro chiave primaria (e/o valore discriminante, dall'sql mi sembra di capire sia freelance_associazioni.id_sottocategoria)

    In questo modo eviti non poco codice ad hoc per gestire ogni singola join aggiunta dello stesso tipo ed ottieni quello che vuoi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.