Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [MYSQL] Dubbio join

  1. #1

    [MYSQL] Dubbio join

    Ciao a tutti,
    ho dei dubbi su come relazionare queste 2 tabelle

    codice:
    groups
    +-----------+---------------------+--------+
    | group_id  | name                | public |
    +-----------+---------------------+--------+
    dove public indica se un gruppo è accessibile da tutti (0) o è privato (1)
    codice:
    user_groups
    +--------+-----------+-----------+--------+
    | id     | group_id  | user_id   | banned |
    +--------+-----------+-----------+--------+
    Dovrei recuperare la lista di tutti i gruppi che sono pubblici e privati (in questo caso devo controllare se l'utente è presente nella tabella user_groups) ed escludere quando l'utente è bannato (banned = 1).


    codice:
    SELECT * 
    FROM groups as g NATURAL LEFT OUTER JOIN user_groups as u 
    WHERE (public = 1 or u.user_id = 14) and NOT EXISTS ( SELECT 1 FROM user_groups as b WHERE b.group_id = g.group_id and b.user_id = 14 and b.banned = 1) 
    GROUP BY g.group_id 
    ORDER BY members_count DESC 
    LIMIT 0, 10
    Sono riuscito a fare questa query ma ho dei dubbi sul fatto che sia la soluzione migliore.
    Che ne pensate?

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: [MYSQL] Dubbio join

    Originariamente inviato da ultrasct
    Ciao a tutti,
    ho dei dubbi su come relazionare queste 2 tabelle

    codice:
    groups
    +-----------+---------------------+--------+
    | group_id  | name                | public |
    +-----------+---------------------+--------+
    dove public indica se un gruppo è accessibile da tutti (0) o è privato (1)
    codice:
    user_groups
    +--------+-----------+-----------+--------+
    | id     | group_id  | user_id   | banned |
    +--------+-----------+-----------+--------+
    Dovrei recuperare la lista di tutti i gruppi che sono pubblici e privati (in questo caso devo controllare se l'utente è presente nella tabella user_groups) ed escludere quando l'utente è bannato (banned = 1).


    codice:
    SELECT * 
    FROM groups as g NATURAL LEFT OUTER JOIN user_groups as u 
    WHERE (public = 1 or u.user_id = 14) and NOT EXISTS ( SELECT 1 FROM user_groups as b WHERE b.group_id = g.group_id and b.user_id = 14 and b.banned = 1) 
    GROUP BY g.group_id 
    ORDER BY members_count DESC 
    LIMIT 0, 10
    Sono riuscito a fare questa query ma ho dei dubbi sul fatto che sia la soluzione migliore.
    Che ne pensate?
    Immagino che ciò che tu voglia estrarre sia:
    i gruppi pubblici e privati ai quali l'utente è iscritto e non bannato, diversamente non riesco ad immaginare la query:
    In tal caso sarebbe:
    codice:
    SELECT * FROM user_groups ug
    INNER JOIN groups g
    ON ug.group_id = g.group_id
    WHERE ug.banned = 0
    Se dovessero servirti anche le info degli utenti:
    codice:
    SELECT * FROM user_groups ug
    INNER JOIN groups g
    ON ug.group_id = g.group_id
    INNER JOIN users u
    ON u.user_id = ug.user_id
    WHERE ug.banned = 0

  3. #3

    Re: Re: [MYSQL] Dubbio join

    Originariamente inviato da Joe Taras
    Immagino che ciò che tu voglia estrarre sia:
    i gruppi pubblici e privati ai quali l'utente è iscritto e non bannato, diversamente non riesco ad immaginare la query:
    In tal caso sarebbe:
    codice:
    SELECT * FROM user_groups ug
    INNER JOIN groups g
    ON ug.group_id = g.group_id
    WHERE ug.banned = 0
    Non proprio, mi serve che la query mi dia anche i gruppi a cui l'utente non è iscritto quindi quando non è presente su user_groups.

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