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

    Help Array Multidimensionali

    Ciao A tutti

    sto facendo un piccolo programma per il lavoro dove faccio una query in mysql attraverso una join tra due tabelle e ho necessità di visualizzare i valori a video se rientrano all'interno di un range temporale es: data inzio<= fine validità e data fine >= inizio validità

    il problema che riscontro è nella visualizzazione di tale query, infatti una delle due tabelle che proviene dal nostro gestionale ha i dati messi un po male nel senso che mi mette i valori per colonna anzichè per riga:

    esempio

    impianto|operando|inizio validità|fine validità|prezzo|
    00001 |F1 |01/01/2013 |31/12/2014|0,0005|
    00001 |F2 |01/01/2013 |31/12/2014|0,0007|
    00001 |F3 |01/01/2013 |31/12/2014|0,0009|
    00030 |F1 |01/01/2013 |31/12/2014|0,0001|
    00030 |F2 |01/01/2013 |31/12/2014|0,0005|
    00030 |F3 |01/01/2013 |31/12/2014|0,0004|
    .....

    io vorrei che invece mi venissero nella seguente forma:

    impianto|Inizio Validità|Fine validità|F1|F2|F3|

    so che devo usare un array multidimensionale ma non so come scriverlo mi risulta sempre errore all'esecuzione

    allego un pezzo di codice:



    codice:
    $query  = "SELECT p.POD, o.Impianto, o.Operando, o.ValoreAcquisizione FROM z_operandi as o JOIN z_pod as p ON o.impianto = p.impianto           WHERE (o.InizioValidita <= '$dataf') AND (o.FineValidita >= '$datai')";
                
    $result = mysql_query($query) or die('Query failed: ' . mysql_error());
    
    
    
    
    //stampa risultati html
    $contatore = 0;
    
    
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){
    $impianto=$line['Impianto'];
    $operando=$line['Operando'];
    $inizio=$line['InizioValidita'];
    $fine= $line['FineValidita'];
    $valore=$line['ValoreAquisizione'];

    vi sarei grato se mi aiutaste.

    Salvatore

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Forse cosi.

    Codice PHP:
    <?php 
     
    // Per simolare il risultato della query
     
    $result   = array();
     
    $result[] = array('Impianto' => '00001','Operando' => 'F1','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0005');
     
    $result[] = array('Impianto' => '00001','Operando' => 'F2','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0007');
     
    $result[] = array('Impianto' => '00001','Operando' => 'F3','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0009');
     
    $result[] = array('Impianto' => '00030','Operando' => 'F1','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0001');
     
    $result[] = array('Impianto' => '00030','Operando' => 'F2','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0005');
     
    $result[] = array('Impianto' => '00030','Operando' => 'F3','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0004');
     
     
    $sav_impianto null;
     
    $final        = array();
     
    reset($result); 
     
    $line current($result);
     while (
    $line) {
      if (
    $sav_impianto != $line['Impianto']) {
        
    $sav_impianto $line['Impianto'];
        
    $impianto     $line['Impianto'];
        
    $operando     $line['Operando'];
        
    $inizio       $line['InizioValidita'];
        
    $fine         $line['FineValidita'];
        
    $valore       $line['ValoreAquisizione']; 
     
    $tempArray    = array(); 
      } 
        
      
    $tempArray[] = array('Operando'=>$line['Operando'],'ValoreAquisizione'=>$line['ValoreAquisizione']);
      
      
    $line next($result);
      
      if (
    $sav_impianto != $line['Impianto'] || !$line) {
        
    $final[] = array('Impianto' => $impianto'InizioValidita' => $inizio'FineValidita' => $fine'op1'=>$tempArray[0]['Operando'],
     
    'op2'=>$tempArray[1]['Operando'],'op3'=>$tempArray[2]['Operando'],'val1'=>$tempArray[0]['ValoreAquisizione'],
     
    'val2'=>$tempArray[1]['ValoreAquisizione'],'val3'=>$tempArray[2]['ValoreAquisizione']);
      }
     }
     
     
    print_r($final);
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    ciao Badaze, la tua risposta sembra ottima anche se non riesco a capire il procedimento, ho ripreso il php dopo un paio di anni di stop per cui sono ancora un pò arrugginito!
    mi da errore di indice 1, non so cosa sia, ma soprattutto quello che mi chiedo e se nella colonna "operandi" ci fossero più di tre elementi (F1,F2,F3,F4;F5) ma non per tutti gli impianti(id) come posso distinguerli, si può pensare ad un foreach con $key il valore dell'operando che mi interessa?

    grazie

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Prova ad implementare la query usando group_concat sul campo operando
    Otterrai un solo campo con tutti i valori di operando separati da un delimitatore
    Poi con PHP lo puoi dividere con un esplode
    Credo sia più veloce della proposta di badaze

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da clasku Visualizza il messaggio
    Prova ad implementare la query usando group_concat sul campo operando
    Otterrai un solo campo con tutti i valori di operando separati da un delimitatore
    Poi con PHP lo puoi dividere con un esplode
    Credo sia più veloce della proposta di badaze
    Yes it is.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    grazie per i suggerimenti ma mi sono arenato, forse è più complicato di quello che pensassi,

    non so usare gli array tanto meno quelli tridimensionali....la soluzione di badaze sembrava valida ma mi da un errore che non capisco.


    è difficile mettere tante righe con lo stesso id in un'unica riga e sistemata:

    partenza
    impianto|operando|inizio validità|fine validità|prezzo|
    00001 |F1 |01/01/2013 |31/12/2014|0,0005|
    00001 |F2 |01/01/2013 |31/12/2014|0,0007|
    00001 |F3 |01/01/2013 |31/12/2014|0,0009|
    00030 |F1 |01/01/2013 |31/12/2014|0,0001|
    00030 |F2 |01/01/2013 |31/12/2014|0,0005|
    00030 |F3 |01/01/2013 |31/12/2014|0,0004|
    00030 |F4 |
    01/01/2013 |31/12/2014|0,0010|
    ..........
    risultato sperato

    impianto inizio validita fine validita F1 F2 F3 F4
    00001 01/01/2013 31/12/2013 0,0005 0,0007 0,0009
    00030 01/01/2013 31/12/2013 0,0001 0,0005 0,0004 0,0010


    GRAZIE COMUNQUE

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Qual'errore ti dà ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Se ho un po' di tempo stasera provero' a vedere se è fattibile con n operando.
    Ma dovresti dare un'occhiata alla soluzione con sql.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Cosi è molto meglio.
    Codice PHP:
    <?php 
     
    // Per simolare il risultato della query
     
    $result   = array();
     
    $result[] = array('Impianto' => '00001','Operando' => 'F1','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0005');
     
    $result[] = array('Impianto' => '00001','Operando' => 'F2','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0007');
     
    $result[] = array('Impianto' => '00001','Operando' => 'F3','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0009');
     
    $result[] = array('Impianto' => '00030','Operando' => 'F1','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0001');
     
    $result[] = array('Impianto' => '00030','Operando' => 'F2','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0005');
     
    $result[] = array('Impianto' => '00030','Operando' => 'F3','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0004');
     
    $result[] = array('Impianto' => '00030','Operando' => 'F4','InizioValidita' => '01/01/2013','FineValidita' => '31/12/2014','ValoreAquisizione' => '0,0014');
     
     
    $sav_impianto null;
     
    $final        = array();
     
    $index        = -1;
     foreach(
    $result as $line) {
      if (
    $sav_impianto != $line['Impianto']) {
        
    $sav_impianto  $line['Impianto'];
        
    $impianto      $line['Impianto'];
        
    $inizio        $line['InizioValidita'];
        
    $fine          $line['FineValidita'];
        
    $index++;  
        
    $final[$index] = array('Impianto' => $impianto'InizioValidita' => $inizio'FineValidita' => $fine);
      } 
      
      
    $final[$index] = array_merge($final[$index],array($line['Operando']=>$line['ValoreAquisizione']));
     }
     
     
    print_r($final);
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10

    Warning: Invalid argument supplied for foreach() in C:\wamp\www\analisi_prezzi.php on line 31

    ciao Badaze intanto ti ringrazio e ti dico che funziona benissimo.

    se utilizzo interamente il tuo codice ottengo quello che mi serviva, ma se invece dell'Arrey che simula la query uso la query mi da un errore che non riesco a capire il motivo:
    "SCREAM: Error suppression ignored for"
    "Warning: Invalid argument supplied for foreach() in C:\wamp\www\analisi_prezzi.php on line 31"

    non riesco proprio a capire, ti metto completamente il codice:

    codice:
    <?phpdate_default_timezone_set('UTC');
    // Connecting, selecting database
    $link = mysql_connect('localhost', 'root', '')
        or die('Could not connect: ' . mysql_error());
    mysql_select_db('db_prezzi') or die('Could not select database');
    //query analisi prezzi
    if($_POST){ 
      $datai = $_POST['datai'];
      $dataf = $_POST['dataf'];
      }
    $query  = "SELECT * FROM z_operandi as o JOIN z_pod as p ON o.impianto = p.impianto
    		   WHERE (o.InizioValidita <= '$dataf') AND (o.FineValidita >= '$datai')";		
    $result = mysql_query($query) or die('Query failed: ' . mysql_error());
    
    
    //while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){
    
    
     $sav_impianto = null;
     $final        = array();
     $index        = -1;
    echo "<tr>";
    //if (!empty($result)) {
    [31]	 foreach($result as $line) {
    
    
    		  if ($sav_impianto != $line['Impianto']) {
    			$sav_impianto  = $line['Impianto'];
    			$impianto      = $line['Impianto'];
    			$inizio        = $line['InizioValidita'];
    			$fine          = $line['FineValidita'];
    			$index++;  
    			$final[$index] = array('Impianto' => $impianto, 'InizioValidita' => $inizio, 'FineValidita' => $fine);
    
    
    		  } 
    		  
    		  $final[$index] = array_merge($final[$index],array($line['Operando']=>$line['ValoreAcquisizione']));
    	 }
     //}
    	echo"</tr>";
    
    
     print_r($final);
    //}
    ?>

    grazie mille per tuo importante aiuto!

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.