Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505

    MySql - aggiungere un campo con conteggio relativo ad un altro campo

    Salve a tutti. Ho una tabella in un database del tipo :

    codice:
    id   ref     data
    1    111     data1
    2    111     data2
    3    111     data3
    4    111     data4
    5    222     data1
    6    222     data2
    7    222     data3
    8    333     data1
    9    333     data2
    e vorrei aggiungerci un altro campo, diciamo "pos", che mi contasse in maniera progressiva le linee in base al ref. Quindi mi aspetto una cosa del tipo :

    codice:
    id   ref     data    pos
    1    111     data1   1
    2    111     data2   2
    3    111     data3   3
    4    111     data4   4
    5    222     data1   1
    6    222     data2   2
    7    222     data3   3
    8    333     data1   1
    9    333     data2   2
    Come posso fare? Saluti

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Se sapessi cosa non va nella query che ti ho scritto su stackoverflow

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    ah sei te... haha! Scusa per il topic con PHP, ma quella soluzione sembra non funzionare! La mia tabella è questa :

    codice:
        CREATE TABLE `items` (
          `id` int(11) unsigned NOT NULL auto_increment,
          `trackid` varchar(255) NOT NULL,
          `side` varchar(255) NOT NULL,
          `side_pos` char(2) NOT NULL default '#',
          `pos` int(11) NOT NULL,
          `hh` char(2) NOT NULL,
          `mm` char(2) NOT NULL,
          `ss` char(2) NOT NULL,
          `atl` text NOT NULL,
          PRIMARY KEY  (`id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=20229 DEFAULT CHARSET=utf8
    Quindi ho provato con :

    codice:
    update items as z inner join (
    SELECT x.id, x.trackid, x.rank AS `order`
      FROM (SELECT t.id, t.trackid
                   CASE 
                     WHEN @trackid = t.trackid THEN @rownum := @rownum + 1
                     ELSE @rownum := 1
                   END AS rank,
                   @trackid := t.trackid
              FROM items t
              JOIN (SELECT @rownum := NULL, @trackid := -1) r
          ORDER BY t.id, t.trackid) x      
    ) y
    set z.order = y.order
    where z.id = y.id
    ma mi dice che c'è un errore vicino al CASE...

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    L'errore vicino al case è dovuto al fatto che ci vuole una virgola dopo trackid. Comunque non è ciò che ti avevo scritto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    ora mi dice che z.order è sconosciuta... non sarà magari "set z.rank = y.rank" ?

    Query attuale :

    codice:
    update items as z inner join (
    select x.id, x.trackid, x.pos as `order`
      from (select t.id, t.trackid, 
                   case 
                     when @trackid = t.trackid then @rownum := @rownum + 1
                     else @rownum := 1
                   end as pos,
                   @ref := t.trackid
              from items t
              join (select @rownum := null, @trackid := -1) r
          order by t.id, t.trackid) x
    ) y
    set z.order = y.order
    where z.id = y.id

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Nella tabella items non vedo nessun campo che si chiami nè order nè rank.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    Eh infatti è "pos", rinominata come "order". Sopra ho modificato il messaggio e ti ho incollato la query attuale

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Che confusione con tutti quei cambiamenti di alias. Prova così.

    codice:
    update items as z inner join (
    select x.id, x.trackid, x.pos
      from (select t.id, t.trackid, 
                   case 
                     when @trackid = t.trackid then @rownum := @rownum + 1
                     else @rownum := 1
                   end as pos,
                   @ref := t.trackid
              from items t
              join (select @rownum := null, @trackid := -1) r
          order by t.id, t.trackid) x
    ) y
    set z.pos = y.pos
    where z.id = y.id

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    Stavolta la query è stata eseguita, ma pos è sempre 1 su tutte le righe della tabella

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da markzzz
    Stavolta la query è stata eseguita, ma pos è sempre 1 su tutte le righe della tabella
    Aspetta 5 minuti che carico il dump.

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.