Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833

    Select distinct non imposta i dati reperiti

    Ciao a tutti, ma per impostare i dati reperiti con una select distinct devo usare un metodo diverso rispetto a una select normale? vi spiego con questa select mi aspettavo di reperire e stampare il campo costumerLOGLKN, invece la select funziona pero' mi stampa solo le righe (vedi codice, una bianca e una grigia) ma non il campo! il fatto e' che le righe che stampa sono 9 che sono i record del file logmon00f quindi riesce a reperire i 9 record ma
    non mi imposta il valore nella variabile.
    Cosa sbaglio in queste istruzioni? Ciao e grazie

    <?php $sql = "SELECT DISTINCT (LOGLKN) FROM VAM400.LOGMON00F order by loglkn";

    $stmt = db2_exec($dbh, $sql, array('cursor' => DB2_SCROLLABLE));

    print '<table border=0 cellpadding9 cellspacing=0 bgcolor="#F7F7F7" bordercolor="#F7F7F7">';

    while ($row = db2_fetch_array($stmt))
    {
    if (!$row=="") {
    $costumerLOGLKN = $row[12];
    $_SESSION['costumerLOGLKN'] = $costumerLOGLKN;
    ?>

    <tr>
    <?php if ($contatore=='1'){
    ?>
    <td bgcolor="#CCCCCC" align="left" width="100"> <a href="srvrq13.php?costumerLOGLKN=<?php echo($costumerLOGLKN);?>"'>
    <?php echo ($costumerLOGLKN);?></a>
    </td>

    <?php
    }
    ?>


    <?php if ($contatore=='2'){
    ?>
    <td bgcolor="#F7F7F7" align="left" width="100"> <a href="srvrq13.php?costumerLOGLKN=<?php echo($costumerLOGLKN);?>"'>
    <?php echo ($costumerLOGLKN);?></a>
    </td>
    <?php
    }
    ?>

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Up

    Ho notato che anche se faccio questa select non mi imposta il valore presente in LOGLKN

    $sql = "SELECT LOGLKN FROM VAM400.LOGMON00F order by loglkn";

    $stmt = db2_exec($dbh, $sql, array('cursor' => DB2_SCROLLABLE));

    while ($row = db2_fetch_array($stmt))
    {
    if (!$row=="") { $costumerLOGLKN = $row[11];
    ?>
    ....
    <?php echo ($costumerLOGLKN );?>


    Mentre se seleziono tutti i campi me lo stampa.

    $sql = "SELECT * FROM VAM400.LOGMON00F order by loglkn";




    QUALCHE IDEA, non capisco questo comportamento, oppure un'altro metodo per fare
    prima una lettura solo di "9" record di un file che ne ha migliaia (attualmente DISTINCT LOGLKN) e poi per ognuno dei "9" fare una select where LOGLKN = $quelloappenareperito.
    sempre sullo stesso file

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Non conosco l'interfaccia php per il db2, ma mi insospettisce non poco il modo in cui cerchi di estrarre i dati. Perché usi $row[12] e $row[11]? Mi pare tu estragga una sola colonna in entrambe le query...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Ok, infatti al primo giro mi serve estrarre solo il campo LOGLKN, che nel file su as400
    e' alla posizione 11 (dove ho messo 12 era sbagliato), ma la posizione e' giusta
    in tutte le altre select questo metodo funziona e funziona anche se metto SELECT *
    oppure SELECT DISTINCT * .

    Il fatto e' che se metto SELECT DISTINCT LOGLKN, per qualche motivo non mi imposta
    il risultato contenuto nel $row[11].

    Questo mi serve per reperire solo il nome del link. nel file ci sono, nel mio caso 9 LINK, che pero' hanno ciascuno migliaia di record e' una specie di storico.
    Ora io devo visualizzare solo l'ultimo record (ultima ora e ultima data) per ciascuno dei 9 LINK.

    Per questo pensavo di reperire prima i 9 LINK "SELECT DISTINCT LOGLKN"
    per poi per ogni LINK reperire l'ultima registrazione e emettere i relativi dati

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Immagino che per "file su as400" tu intenda il database db2...

    La posizione non è giusta, altrimenti funzionerebbe
    Non è un caso che funzioni se metti SELECT *, perché in quel caso stai estraendo tutte le colonne, ed evidentemente quella che ti interessa è la dodicesima. Ma se fai una "SELECT nomecolonna" ne stai estraendo una sola, e la dodicesima non esiste.

    Scommetti che con $row[0] qualcosa succede?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Questa me la devi spiegare, mettendo $row[0] mi estrae il dato!!!
    Perche' ti assicuro che il campo LOGLKN nel file LOGMON00F del db2 e' alla posizione $row[11] VVoVe:

    Infatti se faccio una select completa (vedi es.) mi estrae il LOGLKN nella posizione 11
    Comunque mi spieghi come mai questa situazione e un'altra domanda e' come in quella
    select, che utilizzero' a questo punto con row[0] posso mettere dentro il cast del campo
    LOGLKN: CAST(LOGLKN AS CHAR(8) CCSID 280) non so dove definirlo.

    Grazie per l'aiuto, ciao

    Posto la select dove reperisce LOGLKN alla posizione 11 e che funziona


    SELECT

    CAST(LOGATV AS CHAR(1) CCSID 280),CAST(LOGMAN AS CHAR(1) CCSID 280),CAST(LOGDUM AS CHAR(10) CCSID 280),
    CAST(LOGUTM AS CHAR(10) CCSID 280),CAST(LOGUTG AS CHAR(10) CCSID 280),CAST(LOGDMS AS CHAR(10) CCSID 280),
    CAST(LOGOMS AS CHAR(8) CCSID 280),CAST(LOGTSM AS CHAR(26) CCSID 280),CAST(LOGLCS AS CHAR(10) CCSID 280),
    CAST(LOGRMS AS CHAR(10) CCSID 280),CAST(LOGTRE AS CHAR(1) CCSID 280),CAST(LOGLKN AS CHAR(8) CCSID 280),
    CAST(LOGSTJ AS CHAR(15) CCSID 280),CAST(LOGLAG AS CHAR(5) CCSID 280),CAST(LOGJOL AS CHAR(20) CCSID 280),
    CAST(LOGINO AS CHAR(10) CCSID 280),CAST(LOGPA1 AS CHAR(6) CCSID 280),CAST(LOGMSG AS CHAR(512) CCSID 280),
    CAST(LOGIFS AS CHAR(10) CCSID 280),CAST(LOGLAGM AS CHAR(5) CCSID 280),CAST(LOGPA1M AS CHAR(6) CCSID 280),
    CAST(LOGDIF AS CHAR(10) CCSID 280)


    FROM VAM400.LOGMON00F order by logtsm desc ";

    $stmt1 = db2_exec($dbh, $sql, array('cursor' => DB2_SCROLLABLE));

    print '<table border=0 cellpadding9 cellspacing=0 bgcolor="#F7F7F7" bordercolor="#F7F7F7">';

    while ($row = db2_fetch_array($stmt1))
    {
    if (!$row=="") {
    $costumerLOGDMS = $row[5];
    $costumerLOGOMS = $row[6];
    $costumerLOGTSM = $row[7];
    $costumerLOGTRE = $row[10];
    $costumerLOGLKN = $row[11];
    $costumerLOGRMS = $row[9];
    $costumerLOGSTJ = $row[12];
    $costumerLOGDIF = $row[21];
    $costumerLOGINO = $row[15];
    $costumerLOGJOL = $row[14];
    $costumerLOGLAG = $row[16];

    ?>

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Ho capito il fatto del $row[0], giustamente se seleziono solo un campo non posso cercarlo alla posizione 11, ciula io , non capisco pero' perche' alla posizione 0 e non alla 1, ma non e' importante.

    Ora pero' devo risolvere un problema di decodifica. (il file e' definito con CCSID 65535 mentre lo devo emettere a video con CCSID 280)
    come faccio a fare quella select distinct con anche la funzione cast, cioe'
    a questa select
    <?php $sql = "SELECT DISTINCT LOGLKN FROM VAM400.LOGMON00F order by loglkn";

    dove aggiungo il
    CAST(LOGLKN AS CHAR(8) CCSID 280)

    Perche' in una slect "normale" lo faccio cosi':

    SELECT CAST(LOGLKN AS CHAR(8) CCSID 280) FROM VAM400.LOGMON00F order by loglkn";

    ma in quella con il distinct non sono riuscito a capire dove mettere il cast.

    Puoi aiutarmi anche per questo problema, oppure dirmi se e' possbile modificare la variabile reperita:
    qualcosa del genere

    $costumerLOGLKN = $row[0];

    CAST($costumerLOGLKN AS CHAR(8) CCSID 280)

    Grazie ancora e ciao

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    L'ultima che hai detto dimenticala...

    Per quella prima basta aggiungere il DISTINCT dopo la SELECT, lasciando invariato il resto.
    FORSE devi mettere fra parentesi tutta l'espressione CAST fino al FROM

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Niente non accetta nessuna delle due

    SELECT DISTINCT LOGLKN (CAST(LOGLKN AS CHAR(8) CCSID 280)) FROM VAM400.LOGMON00F order by loglkn";

    SELECT DISTINCT LOGLKN CAST(LOGLKN AS CHAR(8) CCSID 280) FROM VAM400.LOGMON00F order by loglkn";

    Altre idee per questa maledetta gestione?

    Ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    833
    Rettifica:
    Funziona se metto il campo della distinct dopo la cast.

    SELECT DISTINCT (CAST(LOGLKN AS CHAR(8) CCSID 280)) LOGLKN FROM VAM400.LOGMON00F order by loglkn";

    Grazie di tutto e alla prossima

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 © 2024 vBulletin Solutions, Inc. All rights reserved.