confrontare due stringhe "numeriche"

francescoITA

Nuovo Utente
10 Gen 2020
9
0
1
Buongiorno a tutti,
mi sto cimentando nello sviluppo di un programma web in php-sql.
Ho un problema nella verifica di due stringhe "numeriche".. provo a spiegarmi meglio:

ho due db creati su phpMyadmin :
uno, di nome f12 dove all'interno c'è un campo "PLT" di tipo varchar(12) con codifica utf8_general_ci, dove all'interno di sono importi (in stringa) di questo tipo : "€ 2.500,00" oppure " 339,00" (occhio che c'è lo spazio all'inizio)

un altro db, di nome ag2020 dove all'interno vi è un campo "importo" di tipo varchar(15) e codifica utf8_general_ci , all'interno ci possono essere dati di questo tipo: "1282.43" oppure " 3026.87 " (spazio avanti e indietro)



tramite una funzione vorrei estrarre i dati per poterli confrontare, andando poi ad alimentare un campo "check" all'interno del db "f12" dove dovra essere "" se non sono uguali, "OK" se i numeri sono gli stessi.

Detto questo (spero di essere stato chiaro e di avervi dato tutte le informazioni utili):

vi evidenzio la parte che mi da problemi
ipotizziamo che nel db ag2020 ci sia tra i dati, importo = " 2764.57 "
e che nel db f12 ci sia tra i dati, PLT = " 2764,57 "
PHP:
$sql1 = "SELECT numero, data, nome, PLT FROM f12";

                $res1 = $conage->query($sql1);

                if (@$res1->num_rows > 0) { ?>

                <table><?php               

                    while ($rig1 = mysqli_fetch_array($res1, MYSQLI_BOTH)) {

                        $incnumero = $rig1['numero'];

                        $incdata = $rig1['data'];

                        $incnome = $rig1['nome'];

                        $incPLT = $rig1['PLT'];

                                          

                        $incPLT = str_replace(",", ".", $incPLT);

                        $incPLT = str_replace(" ", "", $incPLT);

                      


                          

                         $sql20 = "SELECT * FROM $ag2020 WHERE num LIKE '%$incnumero%' AND datainizio = '$incdata' AND TRIM(importo) = '$incPLT';


          

                          

                            $res20 = $conins->query($sql20);

                            if ($res20->num_rows > 0) {

                                while ($rig20 = mysqli_fetch_array($res20, MYSQLI_BOTH)) {

                                    $check= 'OK';

                             .....ecc

                                }

vorrei che il programma capisse che ci troviamo davanti allo stesso "numero"






se faccio così, pur avendo svuotato gli spazi e cambiato la virgola con il punto , non mi restituisce risultati (pur essendoci).. ho provato anche la funzione trim($incPLT) in aggiunta, ma neanche funziona


se invece utilizzo la funzione LIKE al posto dell' = , allora mi trova il risultato


$sql20 = "SELECT * FROM $ag2020 WHERE num LIKE '%$incnumero%' AND datainizio = '$incdata' AND importo LIKE '%$incPLT%';


il problema è che se importo fosse = " 12764.57 " e PLT = " 2764,57 " mi darebbe comunque OK - pur non essendo lo stesso numero - perchè la stringa è contenuto all'interno dell'altra


come posso fare senza cambiare tutte le strutture dei db?

Vi ringrazio in anticipo
buona giornata a tutti
 
Ultima modifica di un moderatore:

Tommy03

Utente Attivo
6 Giu 2018
550
53
28
17
Bassano del Grappa (VI)
Prova a dare un'occhiata alla funzione floatval(stringa) , che te lo converte in float. Pero in questo caso devi stare attento ad avere solo "." e non "," prima della parte decimale, perche sennò converte a numero intero
 

francescoITA

Nuovo Utente
10 Gen 2020
9
0
1
Prova a dare un'occhiata alla funzione floatval(stringa) , che te lo converte in float. Pero in questo caso devi stare attento ad avere solo "." e non "," prima della parte decimale, perche sennò converte a numero intero
Mmm ho visto la funziona però questa è applicabile solo al linguaggio php e non saprei come applicare la conversione del campo “importo” in float “al volo” durante la query

qualche altro suggerimento?

grazie mille
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.312
334
83

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.312
334
83