Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: [MySQL] Union

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250

    Union

    salve,
    ho 2 query quasi simili :

    Codice PHP:
    SELECT FROM utenti AS anotizie AS butenti_notifiche AS c WHERE a.id=b.user AND c.notizie_commenti='1' AND a.attiva='si' AND b.id='5208' GROUP BY a.user 

    SELECT 
    FROM utenti AS acommenti AS butenti_notifiche AS c WHERE a.id=b.user AND c.notizie_commenti='1' AND a.attiva='si' AND b.id_art='5208' GROUP BY a.user 
    vorrei unirle e avere un array con i risultati. Ho provato ad applicare il metodo UNION

    Codice PHP:
    SELECT FROM utenti AS anotizie AS butenti_notifiche AS c WHERE a.id=b.user AND c.notizie_commenti='1' AND a.attiva='si' AND b.id='5208' GROUP BY a.user 
    UNION
    SELECT 
    FROM utenti AS acommenti AS butenti_notifiche AS c WHERE a.id=b.user AND c.notizie_commenti='1' AND a.attiva='si' AND b.id_art='5208' GROUP BY a.user 
    Ma mi da' questo errore: #1222 - The used SELECT statements have a different number of columns

    cosa vuol dire?

  2. #2
    significa semplicemente che la UNION crea un result set che e' la somma di due query e che ha come condizionale che numero e tipo di colonne selezionate sia lo stesso.

    nel tuo caso con select * ottieni un diverso numero di colonne tra le due select, differenza data dalle due diverse tabelle (notizie - commenti) utilizzate nella join.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    Ah! Adesso ho capito, quindi il metodo UNION si usa solamente se ho 2 tabelle con le stesse colonne.
    Nel mio caso cosa mi coviene fare? tengo 2 query o posso unificare il tutto?

    Attualmente 1 query mi estrapola l'utente della notizia, l'altra gli utenti dei commenti, vorrei unificare tutto per avere solo la lista di tutti gli utenti singoli che hanno partecipato all'argomento in questione.

    Ho 4 tabelle che mi gestiscono utenti, notizie e commenti.

    NOTIZIE
    id | titolo | user

    COMMENTI
    id | id_art | user

    UTENTI
    id | email

    UTENTI_NOTIFICHE
    id | notizie_commenti

    Devo prendere l'utente (user) che ha inserito la notizia (tabella notizie), assieme a tutti gli utenti (user) che hanno commentato la notizia (tabella commenti) per ogni utente devo controllare che nella tabella utenti_notifiche abbiamo il valore notizie_commenti impostato a 1 e mi devo prendere anche la loro casella e-mail per inviare la notifica.

  4. #4
    Ciao,

    per questo tipo di richieste c'è l'apposita sezione Database. Sposto il thread li.

    Devi però indicare il tipo di piattaforma utilizzata (mysql, postgresql, sqlite, mssql, db2 e via dicendo)

  5. #5
    devi usare JOIN, non UNION

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    xyz! scusate x il post, non avevo notato la sezione database.
    Cmqe ci stà ragionando.. ma mi blocco...

    Pensavo di fare così:
    Prendere gli utenti dalla tabella notizie e commenti per poi unirli.

    Codice PHP:
    SELECT notizie.user
    FROM notizie
    WHERE notizie
    .id '5208'
    UNION SELECT commenti.user
    FROM commenti
    WHERE commenti
    .id_art '5208'
    GROUP BY user 
    In questo modo mi trovo unificati tutti gli utenti in un unica tabella.
    A questo punto mi blocco perchè mi continua a dare errore la JOIN

    dovrei relazionarmi con la tabella utenti per controllare che l'utente sia attivo (utenti.attiva='si') e con la tabella utenti_notifiche per assicurarmi che l'utente abbia abilitato l'invio delle notifiche (utenti_notifiche.notizie_commenti='si')

    Vi posto la query, mi sapete indicare come devo fare? Sbaglio nella prassi perchè non riesco a capire come andare avanti.

    Codice PHP:
    SELECT notizie.user
    FROM notizie
    WHERE notizie
    .id '5208'
    UNION SELECT commenti.user
    FROM commenti
    WHERE commenti
    .id_art '5208'
    GROUP BY user
    JOIN utenti ON utenti
    .id user  // qui non mi è chiaro come si chiama ora la nuova tabella creata
    WHERE utenti.attiva 'si'
    JOIN utenti_notifiche ON utenti.id utenti_notifiche.user
    WHERE utenti_notifiche
    .notizie_commenti 'si'
    LIMIT 0 30 

  7. #7
    Ciao,

    gentilmente evitiamo l'uso di parole che possono risultare volgari essendo il forum un luogo pubblico.

    Grazie

  8. #8

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    MySQL: 5.0.77 con phpmyadmin

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    qualcuno mi può aiutare a comporre questa query, perchè sono bloccato e non ho proprio idea di come procedere.

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.