Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [MySql] - COUNT + DISTINCT + LEFT JOIN

    Vorrei poter conteggiare con COUNT gli id che relazionano le due tabelle
    codice:
    Struttura delle tabelle:
    -- --------------------------------------------------------
    -- Struttura della tabella `tutorials`
    -- --------------------------------------------------------
    CREATE TABLE `tutorials` (
      `id_tutorial` int(11) unsigned NOT NULL auto_increment,
      `id_tutorial_category` int(11) unsigned NOT NULL default '0',
      `title` varchar(150) character set utf8 NOT NULL default '',
      `visible` tinyint(1) unsigned NOT NULL default '0',
      `date_ins` datetime NOT NULL default '0000-00-00 00:00:00',
      `date_mod` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      PRIMARY KEY  (`id_tutorial`),
      KEY `id_tutorial_category` (`id_tutorial_category`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
    -- --------------------------------------------------------
    -- Struttura della tabella `tutorial_relation`
    -- --------------------------------------------------------
    CREATE TABLE `tutorial_relation` (
      `id_tutorial_relation` int(10) unsigned NOT NULL auto_increment,
      `id_tutorial` int(10) unsigned NOT NULL default '0',
      `visual_order` tinyint(1) unsigned NOT NULL default '0',
      `subtitle` varchar(150) collate latin1_general_ci NOT NULL default '',
      `text` text collate latin1_general_ci NOT NULL,
      `note` varchar(250) collate latin1_general_ci default NULL,
      `image` varchar(32) character set latin1 collate latin1_general_cs default NULL,
      `code` varchar(32) character set latin1 collate latin1_general_cs default NULL,
      PRIMARY KEY  (`id_tutorial_relation`),
      KEY `id_tutorial` (`id_tutorial`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
    
    le mia query di test:
    /*1*/
    SELECT COUNT(tutorials.id_tutorial) FROM tutorials LEFT JOIN tutorial_relation USING(id_tutorial);
    /* errata: mi restituisce 4 ma in realtà sono 2*/
    /*2*/
    SELECT DISTINCT tutorials.id_tutorial, COUNT(tutorials.id_tutorial) FROM tutorials LEFT JOIN tutorial_relation USING(id_tutorial) GROUP BY tutorials.id_tutorial;
    
    /* 
    errata: mi restituisce 2 come dovrebbe essere ma io vorrei visualizzare solo il count
    ma purtroppo non posso omettere  tutorials.id_tutorial nel SELECT a causa del DISTINCT
    */


    cichity74

  2. #2

  3. #3
    Originariamente inviato da bDaniele
    vedi questo thread
    ti ringrazio per il suggerimento.. ma... il mio non è un errore di sintassi...

    codice:
    SELECT DISTINCT tutorials.id_tutorial, COUNT(tutorials.id_tutorial) FROM tutorials LEFT JOIN tutorial_relation USING(id_tutorial) GROUP BY tutorials.id_tutorial;
    mi restituisce 2 come dovrebbe essere ma io vorrei visualizzare solo il count
    ma purtroppo non posso omettere tutorials.id_tutorial nel SELECT a causa del DISTINCT
    hai qualche suggerimento ?????
    per capirci vorrei che mi restituisse solo il risultato di COUNT(tutorials.id_tutorial)
    coem nella query soto stante...
    codice:
    SELECT COUNT(tutorials.id_tutorial) FROM tutorials LEFT JOIN tutorial_relation USING(id_tutorial);
    cichity74

  4. #4
    Prova così:

    codice:
    SELECT COUNT(*) FROM (SELECT DISTINCT tutorials.id_tutorial FROM tutorials LEFT JOIN tutorial_relation USING(id_tutorial) GROUP BY tutorials.id_tutorial)
    Ciao

    "Chi non è in grado di riconoscere la piccolezza delle grandi cose che ha in sè, tende a trascurare la grandezza delle piccole cose negli altri."

  5. #5
    ciao,
    scusami ma non ho capito il problema

  6. #6
    Originariamente inviato da Sarachan
    Prova così:

    codice:
    SELECT COUNT(*) FROM (SELECT DISTINCT tutorials.id_tutorial FROM tutorials LEFT JOIN tutorial_relation USING(id_tutorial) GROUP BY tutorials.id_tutorial)
    Ciao
    Messaggio di MySQL: Documentazione
    #1248 - Every derived table must have its own alias

  7. #7
    Originariamente inviato da bDaniele
    ciao,
    scusami ma non ho capito il problema
    in pratica vorrei eseguire questa query (che funziona)
    codice:
    SELECT tutorials.id_tutorial, COUNT(tutorials.id_tutorial) FROM tutorials LEFT JOIN tutorial_relation USING(id_tutorial) GROUP BY tutorials.id_tutorial;
    ed omettere da select id_tutorial in modo da avere come unico risultato COUNT( tutorials . id_tutorial ) ma la sintassi (almeno quella che io conosco) non me lo permette
    tutto questo mi occorre per soddisfare la prima query della paginazione dei dati
    Vedi:
    (voce // esecuzione prima query)
    http://php.html.it/articoli/leggi/85...one-di-dati/3/

    cichity74

  8. #8
    mettici un alias.... e poi non sei mica obbligato ad estrarre l'id. Lascialo dov'e'.

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

  9. #9
    Cosa ti impedisce di omettere tutorials.id_tutorial dalla select? E dove è finito il distinct? :master:

    "Chi non è in grado di riconoscere la piccolezza delle grandi cose che ha in sè, tende a trascurare la grandezza delle piccole cose negli altri."

  10. #10
    ho fatto un casino scusate ho postato la queri sbagliata
    eccola (quella buona)

    SELECT DISTINCT tutorials.id_tutorial, COUNT(tutorials.id_tutorial) FROM tutorials LEFT JOIN tutorial_relation USING(id_tutorial) GROUP BY tutorials.id_tutorial;

    vorrei che mi restituisse solo COUNT(tutorials.id_tutorial) e non tutorials.id_tutorial + COUNT(tutorials.id_tutorial) come fa attualmente

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.