Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18

    Due cicli while contemporaneamente

    Ciao a tutti, ho bisogno di un aiuto semplice semplice (o almeno così spero).
    In breve: faccio due chiamate a due tabelle diverse e devo stampare a video i risultati di entrambe le chiamate.

    Codice PHP:
    $negativo $data->query("SELECT MONTH(QUANDO) as mese, IFNULL(SUM(AMOUNT),0) as totale FROM calendar_specific WHERE TAG =3 AND TYPE ='0' GROUP BY mese");

    $positivo $data->query("SELECT MONTH(QUANDO) as mese, IFNULL(SUM(AMOUNT),0) as totale FROM calendar_specific WHERE TAG =3 AND TYPE ='1' GROUP BY mese"); 
    Qual'è il problema? Il problema è questo: dovrei stampare a video i risultati contemporaneamente, cioè nello stesso loop "while".

    Cerco di spiegarmi ancora meglio postando il codice che uso:

    Codice PHP:
    if((mysql_num_rows($negativo) > 0) || (mysql_num_rows($positivo) > 0)){
    while((
    $negativo_obj $data->estrai($negativo)) && ($positivo_obj $data->estrai($positivo))){
        
    $mm $data->getMonth($negativo_obj->mese);
        
    $amount_n number_format(round($negativo_obj->totale2), 2'.'' ');
        
    $amount_p number_format(round($positivo_obj->totale2), 2'.'' ');
        
        echo 
    "['".$mm."', ".$amount_n.", ".$amount_p."],";
      }

    Come vedete devo fare un ciclo while con due argomenti. Il problema è che vengono stampati a video dati sfalsati oppure non viene stampato niente se $negativo oppure $positivo ritorna come risultato 0 righe. Qualcuno sa come risolvere?

  2. #2
    fai una sola query di tre colonne di risultato, usando CASE per dire se il totale va nella seconda o nella terza colonna in ìbase al valore della colonna TYPE

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da optime
    fai una sola query di tre colonne di risultato, usando CASE per dire se il totale va nella seconda o nella terza colonna in ìbase al valore della colonna TYPE
    Grazie per la risposta optime.

    Potresti postarmi un esempio così capisco meglio?
    Perchè non so se è chiaro ma il risultato che vorrei stampato a video è di questo tipo:
    ['1', 24, 89], ['2', 0, 135], ['3', 67, 0]

    Ovvero ci possono essere anche delle volte in cui il risultato sia zero.
    La soluzione che mi proponi tu mi aiuta anche in questo senso?

  4. #4
    dovrebbe essere (non conosco benissimo mysql)

    codice:
    SELECT 
       MONTH(QUANDO) as mese, 
       IFNULL(SUM(CASE WHEN TYPE ='0' THEN AMOUNT ELSE 0 END),0) as totale_negativo,
       IFNULL(SUM(CASE WHEN TYPE ='1' THEN AMOUNT ELSE 0 END),0) as totale_positivo,
     FROM 
       calendar_specific 
    WHERE 
       TAG =3
    GROUP BY 
       mese
    facce sape'

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da optime
    dovrebbe essere (non conosco benissimo mysql)

    codice:
    SELECT 
       MONTH(QUANDO) as mese, 
       IFNULL(SUM(CASE WHEN TYPE ='0' THEN AMOUNT ELSE 0 END),0) as totale_negativo,
       IFNULL(SUM(CASE WHEN TYPE ='1' THEN AMOUNT ELSE 0 END),0) as totale_positivo,
     FROM 
       calendar_specific 
    WHERE 
       TAG =3
    GROUP BY 
       mese
    facce sape'
    Grazie Optime, è esattamente quello che mi serviva!
    Nono conoscevo la funzione CASE (anche perchè sono abbastanza neofita di mysql), ma è perfetta per quello che devo fare

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da optime
    dovrebbe essere (non conosco benissimo mysql)

    codice:
    SELECT 
       MONTH(QUANDO) as mese, 
       IFNULL(SUM(CASE WHEN TYPE ='0' THEN AMOUNT ELSE 0 END),0) as totale_negativo,
       IFNULL(SUM(CASE WHEN TYPE ='1' THEN AMOUNT ELSE 0 END),0) as totale_positivo,
     FROM 
       calendar_specific 
    WHERE 
       TAG =3
    GROUP BY 
       mese
    facce sape'
    Ciao Optime, purtroppo lo script che mi ha fornito mi ha dato qualche problema, nel senso che funziona perfettamente, ma non mi fa tornare indietro come output quello che voglio.
    Mi spiego meglio: se in alcuni mesi non ci sono movimenti, l'output non è zero (come mi aspetto io) ma è proprio NULL.

    Io vorrei avere un input di questo tipo per alcuni TAG:

    ['1', 30, 0], ['2', 0, 0], ['3', 0, 0]

    Ovvero per alcuni tag ci possono essere dei mesi in cui sia il totale_negativo che il $totale_positivo sia 0. Se invece sono pari a 0 semplicemente questa SELECT non li prende e quindi risultato che adesso mi viene stampato a video è questo:

    ['1', 30, 0]

    Mi sai dire perchè?

  7. #7
    devi allora mettere in LEFT JOIN una tabella formata dai soli mesi

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da optime
    devi allora mettere in LEFT JOIN una tabella formata dai soli mesi
    Non voglio approfittare della tua bontà, ma saresti così gentile da postarmi un esempio? Anche perchè la tabella che vado a interrogare è già una vista.

  9. #9
    cos'è esattamente che non sai fare?

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da optime
    cos'è esattamente che non sai fare?
    Vorrei che mi facessi vedere come far una left join sulla select di prima. Tra l'altro la tabella "calendar_specific" sulla quale effettuo la SELECT è già una vista e se non sbaglio non si possono fare JOIN su VISTE. O sbaglio?

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.