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

Discussione: JOIN

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2019
    Messaggi
    23

    JOIN

    Ciao a tutti,
    sto diventando matto, non riesco a capire dove sta il problema....... quando lancio una select che esegue la join tra due tabelle questa non mi restituisce nessun risultato, togliendo la join la query funziona correttamente.
    Questa è la struttura delle due tabelle:
    codice:
    CREATE TABLE `cat_timbratura` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `area_attivita` varchar(100) DEFAULT NULL,
      `tipo_attivita` varchar(100) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    codice:
    CREATE TABLE `timbrature` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `utente` varchar(50) NOT NULL,
      `tipo_attivita` int(10) NOT NULL DEFAULT '1',
      `data_e` datetime NOT NULL,
      `ok_u` tinyint(5) DEFAULT NULL,
      `data_u` datetime DEFAULT NULL,
      `note` text,
      PRIMARY KEY (`id`),
      KEY `FK_timbrature` (`tipo_attivita`),
      CONSTRAINT `FK_timbrature` FOREIGN KEY (`tipo_attivita`) REFERENCES `cat_timbratura` (`id`) ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    Questa invece è la query che provo a lanciare:
    codice:
    SELECT s.tipo_attivita,SUM(TIMESTAMPDIFF(HOUR, data_e, data_u)) AS `Time`
    FROM `timbrature` s
    JOIN `cat_timbratura` q ON s.tipo_attivita=q.`tipo_attivita`
    WHERE DATE(data_e) > (NOW() - INTERVAL 7 DAY) 
    AND data_u IS NOT NULL
    GROUP BY s.tipo_attivita
    Qualcuno riesce a capire l'errore?
    Grazie mille in anticipo

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    come da regolamento di sezione devi indicare di che database si tratta.
    occhio ai titoli: devono essere auto descrittivi del problema.
    inoltre:
    Evitate di scrivere titoli del tipo AIUTO!!, HELP ME!! , URGENTE!! , URGENTISSIMO!!! o altri titoli vaghi che non dicano niente di utile sul contenuto dei thread. In caso di ricerca da parte nostra e di altri utenti è impossibile trovare le discussioni relative al problema, perché scritte in maniera impensabile.
    Titoli non inerenti , troppo generici o contenenti parole inutili comportano l'immediata chiusura della discussione. I moderatori non possono stare dietro a tutto, e leggere un topic solo per capire che titolo dare è un lavoro lungo e che non porta benefici. Un titolo appropriato, conciso e chiaro aumenta di molto la probabilità di ricevere risposte mirate e competenti e di essere reperiti facilmente con la ricerca.

  3. #3
    togli tutti gli apici dalla query

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2019
    Messaggi
    23
    fatto ma niente

    codice:
    SELECT s.tipo_attivita, SUM(TIMESTAMPDIFF(HOUR, data_e, data_u))FROM timbrature s
    JOIN cat_timbratura q ON s.tipo_attivita=q.tipo_attivita
    WHERE DATE(data_e) > (NOW() - INTERVAL 7 DAY) 
    AND data_u IS NOT NULL
    GROUP BY s.tipo_attivita

  5. #5
    domanda scema, ma va fatta

    timbrature.tipo_attivita e cat_timbratura.tipo_attivita contengono gli stessi dati?

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2019
    Messaggi
    23
    Ciao,
    il campo timbrature.tipo_attivita viene valorizzato con cat_timbratura.id

    ho provato anche in questo modo senza successo
    codice:
    SELECT s.tipo_attivita, SUM(TIMESTAMPDIFF(HOUR, data_e, data_u))FROM timbrature s
    JOIN 
    (SELECT cat_timbratura.id, cat_timbratura.tipo_attivita FROM cat_timbratura ) q ON s.tipo_attivita=q.tipo_attivita
    WHERE DATE(data_e) > (NOW() - INTERVAL 7 DAY) 
    AND data_u IS NOT NULL
    GROUP BY s.tipo_attivita
    sto diventando matto........

  7. #7
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da iw8ffg Visualizza il messaggio
    Ciao,
    il campo timbrature.tipo_attivita viene valorizzato con cat_timbratura.id

    ho provato anche in questo modo senza successo
    codice:
    SELECT s.tipo_attivita, SUM(TIMESTAMPDIFF(HOUR, data_e, data_u))FROM timbrature s
    JOIN 
    (SELECT cat_timbratura.id, cat_timbratura.tipo_attivita FROM cat_timbratura ) q ON s.tipo_attivita=q.tipo_attivita
    WHERE DATE(data_e) > (NOW() - INTERVAL 7 DAY) 
    AND data_u IS NOT NULL
    GROUP BY s.tipo_attivita
    sto diventando matto........
    Scusa ma le due tabelle hanno un campo tipo_attivita che è definito in due modi completamente diversi, uno è un varchar e l'altro è un int.

    Forse dovresti confrontare il tipo_attività della tabella timbrature con il campo id della tabella cat_timbrature.
    Diversamente non vedo come faccia a funzionare la join.

    In alternativa, se, dovesse essere che il contenuto dei due campi tipo_attivita (a parte il tipo differente di dato) è lo stesso, prova a fare un cast su uno dei due campi, in modo da confrontare int con int o varchar con varchar

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2019
    Messaggi
    23
    ho provato a modificare i due campi in modo che siano definiti come varchar, ma nulla purtroppo. Il risultato atteso è che la query deve mostrare la descrizione associata all'id della tabella cat_timbratura

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2019
    Messaggi
    23
    Eurekaaaaaa, ho capito l'errore..... la join non puntava all'ID ma al campo testuale

    codice:
    SELECT q.tipo_attivita AS 'Attività',SUM(TIMESTAMPDIFF(HOUR, data_e, data_u)) AS 'Time'
    FROM timbrature s
    JOIN cat_timbratura q ON s.tipo_attivita=q.id
    WHERE DATE(data_e) > (NOW() - INTERVAL 7 DAY)
    AND data_u IS NOT NULL
    GROUP BY s.tipo_attivita

  10. #10
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da iw8ffg Visualizza il messaggio
    ho provato a modificare i due campi in modo che siano definiti come varchar, ma nulla purtroppo. Il risultato atteso è che la query deve mostrare la descrizione associata all'id della tabella cat_timbratura
    Allora ricapitoliamo.

    Posta nuovamente la struttura delle due tabelle (dopo il cambio dei tipi di dati) e poi posta anche un insieme di dati di entrambe le tabelle

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.