Visualizzazione risultati 1 fino 26 di 26

Discussione: while mysql con array

  1. #1
    Guest

    Predefinito while mysql con array

    Ciao a tutti!
    Volevo provare a pulire un po' uno script che ho.
    Questo prende dei valori e li incrocia, restituendo nuove combinazioni.
    Partendo da AA e BB incrocio ottenendo 4 AB
    Un array mi mostrerà la quantità (come chiave) e il codice (come valore) del risultato. in questo esempio
    Codice PHP:
    $combinazioni = array( 0 => 'AA', 0 => 'BB', 4=> 'AB');
    il codice e le combinazioni sono molto più complesse.
    a questo punto se il codice è > 0 lo stampa.

    La situazione attuale consiste nell'andare ad interrogare ogni combinazione > 0 e fare un echo..

    volevo provare ad andare a semplificare la cosa con un while o un for..integrando mysql dal quale estrae i valori da una tabella con struttura id, codice, descrizione

    es
    AA - mutazione A
    BB - mutazione B
    AB - mutazione ibrida

    ho buttato giù questo, che in teoria dovrebbe funzionare, ma la pagina carica fino all'infinito e non mostra nulla.
    $risultato è l'array dei risultati > 0

    Codice PHP:
    for ($i = 0; $i < count ($risultato); $i++) {

    $stringa = array($risultato[$i]);
    $array = implode(",", $stringa);

    $sql = "SELECT * FROM tabella WHERE codice IN ('$array')";
    $query = mysql_query($sql)or die("Non riesco ad eseguire la query");
    $results = mysql_fetch_array($query);

    while (
    $results) {
    $descrizione = $results[descrizione];
    }

    echo
    $descrizione."<br>";

    }

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Basta fare così:

    Codice PHP:
    for ($i = 0; $i < count ($risultato); $i++) {

    $stringa = array($risultato[$i]);
    $array = implode(",", $stringa);

    $sql = "SELECT * FROM tabella WHERE codice IN ('$array')";
    $query = mysql_query($sql)or die("Non riesco ad eseguire la query");

    while (
    $results = mysql_fetch_array($query)) {
    $descrizione = $results[descrizione];
    }

    echo
    $descrizione."<br>";

    }


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,253

    Predefinito

    Citazione Originalmente inviato da saitfainder Visualizza messaggio
    Codice PHP:
    for ($i = 0; $i < count ($risultato); $i++)
    Tempo fa mi hanno detto che un for di quel genere fa eseguire la count() ogni volta, quindi è uno "spreco" di calcolo. Mi han detto di ottimizzarlo in questo modo:
    Codice PHP:
    $temp count ($risultato);
    for (
    $i = 0; $i < $temp; $i++)
    É vero? Cioè, io pensavo venisse ottimizzata durante la "compilazione" della pagina...

    Grazie,
    Ciao!

  4. #4
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    In teoria si, in pratica bisognerebbe provare. In ogni caso se si cicla un array preferisco usare foreach.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  5. #5
    Guest

    Predefinito

    Ottimo!
    Credo che ci sia ancora qualche problema con implode..
    se faccio un echo dell'array = implode(",", $stringa); non prende in considerazione il separatore "," e mi restituisce l'elenco dei valore dell'array...le ipotetiche combinazioni di sopra, in questo modo
    AA
    BB
    AB
    e quindi, inserite nella query sql.. non vengono lette in modo corretto.

  6. #6
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Dalla tua descrizione non si capisce tanto, ma immagino che tu abbia una cosa così

    Codice:
    WHERE codice IN ('AA,BB')
    Al posto di questo

    Codice:
    WHERE codice IN ('AA','BB')
    Basterebbe fare un implode usando " ',' " come stringa collante. Non è molto elegante, ma dovrebbe funzionare.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  7. #7
    Guest

    Predefinito

    non funziona comunque.. l'echo rimane invariato. non so come mai non prende in considerazione il separatore dell'implode.
    come faccio a sapere se il mio array è come il primo o secondo caso che mi hai mostrato?

    grazie

  8. #8
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Fatti stampare $query


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  9. #9
    Guest

    Predefinito

    echo $query???
    Ultima modifica di gphp : 01-02-2011 alle ore 20.20.25

  10. #10
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Volevo dire $sql. Scusa.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  11. #11
    Guest

    Predefinito

    perfetto! risolto. avevo sbagliato io ha compilare il nome della tabella ^^

    tutto ok, ultimo problema.
    ho inseriro un array_unique per evitare giri sullo stesso valore.
    se faccio un print_r($risultato); mi mostra il mio bell'array es ([0] => AA [4] => BB)
    ma poi se faccio un echo richiamando dal database i valori vedi sopra) mi restiuisce per due volte AA e non AA, BB.

    why?

    Codice PHP:
    for ($i = 0; $i < count ($risultato); $i++) {
    $mut[$risultato[$i]]++;

    $stringa = array($risultato[$i]);
    $array = implode(" ',' ", $stringa);

    $sql = "SELECT * FROM tabella WHERE codice IN ('$array')";
    $query = mysql_query($sql)or die("Non riesco ad eseguire la query");
    while (
    $results = mysql_fetch_array($query)) {
    $descrizione= $results[descrizione];
    $codice= $results[codice];
    }

    echo
    $descrizione.' - '.$codice.'; // qui me lo mostra sbagliato es AA AA
    }

    print_r($risultato); // qui mi mostra array corretto es AA BB
    EDIT
    Probabilmente è un problema nella query, o nell'implode.. non saprei cos'altro.
    secondo voi? posso stampare qualche variabile particolare per capire meglio la cosa?
    Ultima modifica di musicanapoli : 09-02-2011 alle ore 04.14.01

  12. #12
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Veramente non ho ancora ben capito cosa stai tentando di fare. Comunque farsi stampare tutti i valori intermedi è un'ottima strategia di debug.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  13. #13
    Guest

    Predefinito

    il problema resta nell'implode.
    ho provato a fare un echo dell'array e mi da tutti i valori senza separatore... cioè AAAA ad esempio.

  14. #14
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    È impossibile che $array contenga tutti i dati appiccicati in quel modo se il codice è quello che hai postato prima. Se è così c'è un problema con i dati in ingresso.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  15. #15
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio

    É vero? Cioè, io pensavo venisse ottimizzata durante la "compilazione" della pagina...

    Grazie,
    Ciao!
    Ciao Bolognese :P
    mi sà che il for di php, come C e Java non si basa su iterazione determinata.
    ad esempio ci sono linguaggio, tipo ALGOL, che calcolano una volta l'espressione e vanno a congelarne i valori in opportune variabili non accessibili al programmatore, le espressioni vengono valutate e i valori di queste variabili non sono più modificabili, evitando anche i loop( calcolando prima che venga eseguito il ciclo il numero di iterazioni).

    Nel caso di questo linguaggio suppongo che verrebbe calcolato il valore su count() una volta sola e poi memorizzato in queste variabili, per php mi sa che potendo modificare esplicitamente le variabili di controllo questo non è possibile, quindi quello che ti hanno detto è vero.
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  16. #16
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Citazione Originalmente inviato da gphp Visualizza messaggio
    il problema resta nell'implode.
    ho provato a fare un echo dell'array e mi da tutti i valori senza separatore... cioè AAAA ad esempio.
    Fatti stampare $stringa con una print_r. Se l'implode non fa niente è perché potrebbe essere un array che contiene un solo elemento.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  17. #17
    Guest

    Predefinito

    pubblico intero codice (anche se semplificato.. è strutturato per gestire valori con 4 coppie di lettere. qui invece mi limito a una coppia ;) )

    [PHP rimosso]

    immaginate questa struttura con stringhe tipo AABBCCDD.. integrarlo con mysql è stata un'idea per evitare decine di righe di codice per tutte le combinazioni!

    Come mai ora, tornando al problema, se stampo $stringa prima dell'implode mi mostra i risultati corretti... ma dopo nel while mi restituisce solo il primo valore dell'array.

    Come mai?

    Grazie
    Ultima modifica di gphp : 08-02-2011 alle ore 23.33.31

  18. #18
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Cosa restituisce esattamente la print_r di $stringa?


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  19. #19
    Guest

    Predefinito

    con questo codice "tipo" la situazione è questa
    incrociando AA e BB

    Codice PHP:
    $risultato = array_unique($risultato);
    print_r ($risultato); // Array([4] => AB)
    for ($i = 0; $i < count ($risultato); $i++) {
    $r[$risultato[$i]]++;
    $stringa = array($risultato[$i]);
    print_r ($stringa); // Array([0] => )
    $stringa = implode(" ',' ", $stringa);
    print_r ($stringa); // non stampa nulla
    stampando le stesse cose nel mio codice (che ha molti più valori/combinazioni/risultati) ho questa situazione

    Codice PHP:
    $risultato = array_unique($risultato);
    print_r ($risultato); // Array([0] => risultato1 [1] => risultato2 [2] => risultato3 [x] => risultatox)
    for ($i = 0; $i < count ($risultato); $i++) {
    $r[$risultato[$i]]++;
    $stringa = array($risultato[$i]);
    print_r ($stringa); // qui cosa strana ..mi da il primo e poi alcuni si e altri no...non so in base a cosa Array([0] => risultato1) Array([0] =>) Array([0] => risultato3) Array([0] =>)
    $stringa = implode(" ',' ", $stringa);
    print_r ($stringa); // non stampa nulla
    Ultima modifica di gphp : 08-02-2011 alle ore 17.20.31

  20. #20
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Prova ad usare la foreach al posto della for visto che l'array_unique ti può creare del buchi negli indici.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  21. #21
    Guest

    Predefinito

    Codice PHP:
    foreach( $risultato as $numero => $codice ) {
    $stringa .=$codice.', ';
    }
    $sql = "SELECT * FROM tabella WHERE codice IN ('$stringa')";
    così però ho il problema che la stringa finisce con una virgola e nell'IN della query non va bene..

  22. #22
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Intendevo una cosa del genere:

    Codice PHP:
    $risultato = array_unique($risultato);
    print_r ($risultato);
    foreach (
    $risultato as $item) {
    $r[$item]++;
    $stringa = array($item);
    $stringa = implode(" ',' ", $stringa);
    E riscrivendolo mi sono accorto che è normale che non funziona: $stringa ha un solo elemento perché se fai array($item) crei un array con un solo elemento ovvero $item.

    Non è che intendi una cosa del genere?

    Codice PHP:
    $risultato = array_unique($risultato);
    print_r ($risultato);
    foreach (
    $risultato as $item) {
    $r[$item]++;
    $stringa = implode("','", $item);


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  23. #23
    Guest

    Predefinito

    Warning: implode() [function.implode]: Invalid arguments passed

  24. #24
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Sapessi cosa c'è esattamente in $risultato...


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  25. #25
    Guest

    Predefinito

    Ho fatto un po' di prove e sono giunto a questo
    Codice PHP:
    $stringa = "'";
    $stringa .= implode("', '", $risultato);
    $stringa .= "'";
    echo
    $stringa; //che mi restituisce i risultati in questa forma CORRETTA ‘risultato1’, ‘risultato2’, ‘risultatox’

    //qui c'è il problema

    $sql = "SELECT * FROM tabella WHERE codice IN ($stringa)";
    $query = mysql_query($sql)or die("Arrenditi");
    while (
    $results = mysql_fetch_array($query)) {
    $descrizione= $results[descrizione];
    $codice= $results[codice];
    }
    echo
    $codice.' - '.$descrizione.'<br>'; //che mi restituisce solo un risultato, uno a caso..
    come mai? a questo punto è il while sbagliato, visto che fino a prima tutto viene eseguito in modo corretto.
    Ultima modifica di gphp : 09-02-2011 alle ore 22.55.10

  26. #26
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Se come risultato vuoi un array associativo allora devi usare mysql_fetch_assoc()


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •