Visualizzazione risultati 1 fino 5 di 5

Discussione: MySQL - JOIN 1 a molti e conteggio record

  1. #1
    phollia non è connesso Utente giovane
    Data registrazione
    05-02-2015
    Messaggi
    34

    Predefinito MySQL - JOIN 1 a molti e conteggio record

    Salve

    vi chiedo scusa per il titolo ma non sapevo come impostarlo.

    In un DB MySQL ho due tabelle (tab1 e tab2) legate da una relazione 1 a molti.
    Ora, per come sono popolate, per ogni riga della tabella tab1 corrisponde sempre ALMENO un record di tab2, ma possono anche essere di più.

    La mia necessità è quella di estrarre i dati di tab1 con l'aggiunta del numero di record di tab2 associati ad ogni record di tab1.

    Come fare?

    Grazie.

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    Prova qualcosa di simile a questo:

    Codice:
    SELECT id, COUNT(*) FROM tab1 JOIN tab2 ON tab1.campo = tab2.campo GROUP BY id;
    Dove per id si intende la chiave primaria della prima tabella, e campo è la colonna su cui effettui la JOIN.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  3. #3
    phollia non è connesso Utente giovane
    Data registrazione
    05-02-2015
    Messaggi
    34

    Predefinito

    Grazie, funziona.

    Se adesso oltre al conteggio, mi occorre un campo che contenga la concatenazione dei campi coinvolti nella join.
    Non tutti i campi di tab2, ma solo i valori contenuti in un determinato campo di tab2.
    Cos' se tab2 fosse del tipo

    id|id_tab1|descrizione

    mi servirebbe avere i campi di tab1 con aggiunto il conteggio delle righe di tab2 coinvolte nella join, e un campo che sia il concat di tab2.descrizione.

    Mi potete aiutare?

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,141

    Predefinito

    Puoi usare GROUP_CONCAT:
    Codice:
    SELECT id, COUNT(*), GROUP_CONTACT(tab2.description SEPARATOR ', ') FROM tab1 JOIN tab2 ON tab1.campo = tab2.campo GROUP BY id;

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  5. #5
    phollia non è connesso Utente giovane
    Data registrazione
    05-02-2015
    Messaggi
    34

    Predefinito

    Funziona!!!!

    Grazie!
    Ultima modifica di phollia : 15-06-2018 alle ore 12.18.15

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •