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

    Ricerca dinamica su relazione molti a molti

    Ciao a tutti,

    mi approcio per la prima volta alla creazione di una query dinamica di ricerca per una relazione molti a molti..e sono -ovviamente- incartato.
    La posto qui e non in Database perchè la query viene generata dinamicamente con php..se sbaglio, spostatemi e scusatemi ^^

    Sintetizzando lo schema:
    codice:
    CLIENTI
    - id
    - nome
    - cognome
    
    GRUPPI
    - id
    - titolo
    - descrizione
    
    CLIENTI_GRUPPI
    - id_cliente
    - id_gruppo
    Quando vado ad impostare uno o più gruppi ad ogni cliente, genero una o più tuple di CLIENTI_GRUPPI aventi la coppia degli id delle due entità (e fin qui ci siamo).

    Il problema sorge nel momento in cui devo realizzare una query in grado di escludere dinamicamente determinati clienti in relazioni con uno o più gruppi che seleziono io.

    Della serie "MOSTRAMI tutti i clienti NON appartanenti al/ai seguente/i gruppo/i {lista dei gruppi che devo generare da escludere}"
    La lista dei gruppi da escludere la ottengo da una serie di checkbox che l'utente checcka e invia in forma di array alla pagina di ricerca

    Codice PHP:
    $gruppi $_POST['gruppi_da_escludere'];
    $gruppi[1] = primo-id-del-gruppo-da-escludere
    $gruppi
    [2] = secondo-id-del-gruppo-da-escludere
    etc
    .. 
    Leggendo e provando ero arrivato ad un aborto di query
    codice:
    SELECT
    	nome
    FROM
    	clienti
    EXCEPT
    	SELECT
    		*
    	FROM
    		clienti_gruppi
    	WHERE
    		id_cliente = xy (ma qui non riesco a concatenare una serie di AND con la lista degli id dei gruppi da escludere)
    Mi sa che sono completamente fuoristrada.
    Qualcuno che gentilmente potrebbe aiutarmi a capire come si procede di solito in queste situazioni? Ben accetti anche link a tutorials vari.
    Ci sto impazzendo

    Grazie in anticipo a tutti!
    "La luce e' piu' veloce del suono. Per questo motivo alcune persone sembrano brillanti fino a quando non parlano."

  2. #2
    up
    "La luce e' piu' veloce del suono. Per questo motivo alcune persone sembrano brillanti fino a quando non parlano."

  3. #3
    up
    "La luce e' piu' veloce del suono. Per questo motivo alcune persone sembrano brillanti fino a quando non parlano."

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    714
    Dovresti unire le due tabelle con una JOIN.

    Codice PHP:

    SELECT gruppi
    .idgruppi.titolo
    FROM gruppi
         JOIN clienti_gruppi ON 
    (clienti_gruppi.id_gruppo gruppi.id)
    WHERE clienti_gruppi.id '1' AND gruppi.id NOT IN ('1''2''3'
    In questo modo selezioni tutti i gruppi del cliente 1 che non hanno l'id 1, 2 e 3.

    Era questo che intendevi?

  5. #5
    Intanto ti ringrazio per la risposta
    Questa sera provo e ti so dire, a prima vista potrebbe essere la soluzione.
    Grazie ancora
    "La luce e' piu' veloce del suono. Per questo motivo alcune persone sembrano brillanti fino a quando non parlano."

  6. #6
    Scusa per il ritardo nel risponderti!
    Comunque abbi pazienza, sono abbastanza negato con sql
    E' circa giusto, quello che però vorrei ottenere sono tutti i clienti:

    'elencami nome e cognome dei clienti che non appartengono ai seguenti gruppi {lista dei gruppi da escludere}'

    Seguendo un po' il tuo esempio, ho provato così:
    codice:
    SELECT DISTINCT customer.nome, customer.cognome,groups.titolo, groups.id
    FROM customer
    JOIN customer_group
    ON customer_group.customer_id = customer.id
    JOIN groups
    ON groups.id = customer_group.group_id
    WHERE groups.id NOT IN(1, 2, 3, 4, etc. )
    Ma è sbagliata perchè con questa query i nomi si ripetono per ogni gruppo di appartenenza (se ho un customer con 10 gruppi associati, vedrò 10 volte il nome di quel customer..)
    Come potrei fare?
    "La luce e' piu' veloce del suono. Per questo motivo alcune persone sembrano brillanti fino a quando non parlano."

  7. #7
    UP disperato delle 0.52 di Lunedì (sono alla frutta)..Help me, ci sto davvero impazzendo e da solo evidentemente non ci arrivo manco a morire.. :dhò
    "La luce e' piu' veloce del suono. Per questo motivo alcune persone sembrano brillanti fino a quando non parlano."

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 © 2024 vBulletin Solutions, Inc. All rights reserved.