Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [mysql] query complicata - tot x campo e raggrupp x giorno divisi x int(val) campo

    Ciao
    chiedo il vostro aiuto, dato che siete tutti molto ferrati in materia

    allora
    io ho una tabella 'tab_valori'

    con questi campi:

    Codice PHP:
      `iddouble default NULL,
      `
    datadatetime default NULL,
      `
    valoredouble(6,2) default NULL
    questi dei valori di esempio

    Codice PHP:
    INSERT INTO `tab_valori` (`id`, `data`, `valore`) VALUES
    (101'2012-08-05 00:03:15'1.70),
    (
    101'2012-08-05 02:50:22'1.80),
    (
    101'2012-08-05 02:46:39'2.30),
    (
    101'2012-08-06 18:26:05'3.00),
    (
    101'2012-08-07 00:11:22'1.30),
    (
    101'2012-08-06 23:54:22'1.50),
    (
    101'2012-08-07 05:12:33'0.90),
    (
    101'2012-08-07 12:32:54'2.60),
    (
    101'2012-08-07 13:16:51'2.30),
    (
    101'2012-08-08 22:37:10'2.00);
    (
    103'2012-08-05 03:52:23'1.60),
    (
    103'2012-08-05 23:04:58'1.60),
    (
    103'2012-08-07 03:04:22'1.50),
    (
    103'2012-08-07 14:38:02'2.20), 
    mi servono i totali per giorno divisi per int(valore)

    ad esempio, dovrebbe uscirmi (prendo solo l'id 103 per semplificare)

    id data tot1x tot2x tot3x tot4x tot5x tot6x tot7x tot8x tot9x tot10x
    103 2012-08-05 2 0 0 0 0 0 0 0 0 0
    103 2012-08-07 1 1 0 0 0 0 0 0 0 0


    al momento, dato che i valori vanno da 0.x a 10.x
    e mi servono i totali per giorno divisi per int(valore)

    faccio un giro del cavolo

    ciclo da 0 a 10
    for ($conta = 0; $conta <= 10; $conta++)
    ed eseguo la query

    Codice PHP:
    $query  "SELECT id, cast(data as date) as giorno, count(*) AS totale FROM tab_valori ";
    $query .= "WHERE id = '".$id."' AND `data` >= '$query_data_da' AND `data` <= '$query_data_a' ";
    $query .= "AND valore >=".$conta." AND magn <".($conta+1)." ";
    $query .= "group by giorno ORDER BY data ASC "
    ovviamente questo procedimento lo ripeto per tutti gli id

    e memorizzo i risultati in una tabella temp che ha questa struttura
    id data tot1x tot2x tot3x tot4x tot5x tot6x tot7x tot8x tot9x tot10x

    e poi da li me li pesco/lavoro


    magari, voi che siete più competenti di me in query sql, mi aiutate a creare una query che mi tira fuori direttamente quello che serve, senza troppi giri

    Web
    The Original WebMasterOne !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  2. #2
    Non ho capito una cosa:

    103 2012-08-05 2 0 0 0 0 0 0 0 0 0
    103 2012-08-07 1 1 0 0 0 0 0 0 0 0

    è perché al 5/8 hai 2 totali uguali mentre al 07/08 ne hai due di diversi (e quindi riporta 1 1)?

    il numero dei campi di questo risultato è fisso? (ovvero avrai sempre 10 totx?)

  3. #3
    si, il numero che mi serve è il toale delle righe che hanno un valore nel campo x

    id-------data--------tot1x--tot2x--tot3x--tot4x--tot5x--tot6x--tot7x--tot8x--tot9x--tot10x
    103------2012-08-05----2------0------0------0------0------0------0------0------0------0
    103------2012-08-07----1------1------0------0------0------0------0------0------0------0


    vuol dire che cercando i record che hanno id 103 ho:
    per la data 05/08 2 valori 1.x
    per la data 07/08 1 valore 1.x e 1 valore 2.x

    infatti se vedete nei record ho:
    (103, '2012-08-05 03:52:23', 1.60) valore 1.x
    (103, '2012-08-05 23:04:58', 1.60) valore 1.x
    (103, '2012-08-07 03:04:22', 1.50) valore 1.x
    (103, '2012-08-07 14:38:02', 2.20) valore 2.x
    The Original WebMasterOne !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

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.