Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 28 su 28
  1. #21
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Ho detto che l'indice dell'array $a va da 1 a 10 per comodità perché è la realtà di questo momento ma nulla vieta che domani vada da 1 a 30... a me interessa uno script che vada bene ad ogni situazione.

    In parole povere ho bisogno solo della SINTASSI in una query select dove vi è un array php (quindi $a) che ha come indice un campo di una tabella.
    (Certo che se avessi come indice un'altra variabile sarebbe tutto più semplice e farei WHERE '$a[$b]'=1 e filerebbe liscio...)

  2. #22
    Originariamente inviato da mld
    In parole povere ho bisogno solo della SINTASSI in una query select dove vi è un array php (quindi $a) che ha come indice un campo di una tabella.
    O cerchi di spiegare a parole quello che devi fare esattamente oppure, perdonami, ma ci rinuncio dato che non ci ho capito nulla. Magari qualcuno più sveglio di me è riuscito a capire le tue necessità e sarà in grado di darti una mano.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #23
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Scusa, credevo che la cosa fosse chiara anche perché chi mi ha risposto prima suppongo che abbia capito il mio problema...

    Ho una tabella PRONO con vari campi:
    -id
    -data
    -campo
    -descrizione

    Nello script php ho un array $a che ha come indice un valore numerico (da 1 a x) che in pratica è lo stesso valore che può assumere CAMPO [della tabella Mysql] e che può assumere valore 1 o 0.
    In più ho una data_min e una data_max.

    In pratica vorrei una SELECT che mi selezionasse quelle righe che hanno la data compresa fra i 2 estremi (e fin qui tutto ok) e poi vorrei che avessero il valore dell'array $a all'indice CAMPO uguale a 1.

    Mi spiego meglio:
    il mio array $a ha valori:
    $a[1]=1;
    $a[2]=0;
    $a[3]=1;ecc

    Inizio il ciclo delle SELECT (avrò una o più righe con quei requisiti):
    - incontro CAMPO=1, lo prendo perché $a[1]=1
    - incontro CAMPO=3, lo prendo perché $a[3]=1
    - incontro CAMPO=2, non lo prendo perché $a[2]=0

    Quello che avevo fatto io, su suggerimento di Habanero era questo:

    codice:
    $query="SELECT id,data,campo,descrizione FROM prono WHERE {$a['campo']}=1 AND data>='$data_min' AND data<='$data_max'";
    ma non funziona

  4. #24
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    Santa pace...

    Codice PHP:
    $a = array (3,5,7,2,4);
    $campo=2;
    echo 
    $a[$campo]; 
    stampa 7.


    Ti consiglio caldamente di studiarti la diferenza tra array classici e associativi.... alla fine vedi che era esattamente come immaginavo che intendessi la cosa...
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  5. #25
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Non ho capito cosa intendi dicendo:
    $a = array (3,5,7,2,4);

    il mio array $a semmai sarà
    $a = array (0,1,0,1,1,0,1) qualcosa del genere

    quindi non ho ben capito come dovrei agire...scusa

  6. #26
    Ora è più chiaro, ma dubito che ciò si possa fare unicamente con una select dato che per sapere quale indice dell'array prendere di volta in volta dovresti effettuare una select che ti restituisce il valore di CAMPO.
    In pratica per essere in grado di comporre da script la select devi averne precedentemente effettuata una per il recupero dei valori di CAMPO.
    Magari ciò è possibile, ma non sono ferratissimo il SQL. Forse qualche utente potrebbe fornirti una soluzione più efficace.
    Per quanto mi riguarda, credo che tu debba effettuare una select per range di date senza considerare il campo CAMPO. In seguito dovresti scorrere il resultset e conservare solamente i record che hanno $a[CAMPO] = 1.
    Ad esempio:

    Codice PHP:
    $query "SELECT id, data, campo, descrizione FROM prono WHERE data >= '$data_min' AND data <= '$data_max'";
    $result mysql_query($query) or die ("Error: ".mysql_error());
    while (
    $record mysql_fetch_array($result)) {
        if (
    $a[$record['campo']] == 1) {
            
    // Record valido
        
    } else {
            
    // Record da scartare
        
    }

    a questo punto, in base all'utilizzo che dovrai fare dei record validi, potresti inserirli in un array ed utilizzarli successivamente.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #27
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    sto cercando di capire meglio quello che hai scritto, temo di aver travisato... ma tu stai cercando di fare qualcosa che non si può fare in SQL... mischi logica di SQL e logica PHP in modo contorto...
    Le condizioni nella clusola WHERE agiscono solo sui campi estratti o su una qualche funzione SQL. Tu stai applicando una condizione esterna all'SQL... il tuo database non può conoscere la mappatura dell'array a.

    Soluzione 1)
    Fai come ti ha detto satifal...
    nella where lasci i controlli sulle date e poi ti fai una scansione con un ciclo in php per eliminare i risultati che non soddisfano la condizione

    Soluzione 2)
    sposti l'array a in una tabella (TAB_A) del database in cui saranno memorizzati i valori (campo, risultato), dove risultato è il valore 1/0. La tua query diventa una JOIN...


    SELECT prono.id,prono.data,prono.campo,prono.descrizione FROM prono INNER JOIN TAB_A on prono.campo=TAB_A.campo WHERE TAB_A.risultato=1 AND prono.data>='$data_min' AND pronodata<='$data_max'

    NB... La query non l'ho testata..
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  8. #28
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Probabilmente non mi ero spiegato bene all'inizio...ma fin dal primo post ho specificato che non so se la cosa si poteva fare...

    L'idea di Satifal

    codice:
    $query = "SELECT id, data, campo, descrizione FROM prono WHERE data >= '$data_min' AND data <= '$data_max'";
     $result = mysql_query($query) or die ("Error: ".mysql_error()); 
    while ($record = mysql_fetch_array($result)) { 
        if ($a[$record['campo']] == 1) { 
            // Record valido 
        } else { 
            // Record da scartare 
        } 
    }
    l'avevo pensato anch'io... ma pensavo di poter risolvere in altro modo.

    A questo punto vi chiedo...
    l'idea che ho già testato (e funziona) di fare una serie di OR così

    WHERE ((campo=1 AND '$a[1]'=1) OR (campo=2 AND '$a[2]'=1) OR ........... ) AND data>='$data_min' AND data<='$data_max'

    appesantisce troppo la query???

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.