Newsgroup: it.comp.www.php
Titolo: contare

salve, desidererei la vostra insuperabile consulenza per un problema, mo 
vengo e mi spiego (sistema utilizzato apache server1.3.x su winxp sp2, 
easyphp1-8, mysql 4.x php 4.x):
ho un database su mysql con i seguenti campi:
id_pratica (chiave primaria auto increment)
numero_pratica
nome_ditta
ora ammettiamo che nel database siano inseriti già 10 record con 
numero_pratica ad capocchiam es 20-25-54-99-1-10-15-100-1000-45 ecc..(il 
campo numero_pratica purtroppo deve poter contenere numeri stabiliti 
dall'utente quindi non posso auto incrementarlo sigh..)
potreste indicarmi un metodo relativamente semplice (sono un novizio di 
php/msql) con le funzioni di php e/o mysql per suggerire all'utente il primo 
numero_pratica non occupato da record partendo dal numero 1 a salire fino al 
9999, nell'esempio sopraccitato sarebbe il numero 2.
mi scuso in anticipo se ho omesso dati importanti o se non mi sono spiegato 
a dovere oppure se l'argomento riguarda + il lato mysql che quello pp ma a 
causa della mia inesperienza non mi viene facile stabilire gli esatti 
confini tra i due, in ogni caso fatemi notare ogni mia mancanza. grazie.
ringrazio anticipatamente  comunque :)

 fino al 9999, nell'esempio sopraccitato sarebbe il numero 2.
Potresti realizzare questa query che recupera tutti i numeri in ordine.
SELECT numero_pratica FROM tabella ORDER BY numero_pratica ASC;
Poi cicli su tutti i record alla ricerca del "buco":
    $oldValue = 0;
    while($row = mysql_fetch_array($rs)){
        $value = $row[numero_pratica];
        if($value - 1 != $oldValue)
            return $oldValue + 1;
        else
            $oldValue = $value;
    }
Esempio. Supponiamo che la query restituisca questo elenco: 1, 2, 3, 6.
Tu devi restituire 4. Giusto?!
$oldValue = 0
$value = 1
$value - 1 != 0 ? NO, quindi aggiorni $oldValue = $value = 1
$oldValue = 1
$value = 2
$value - 1 != 1 ? NO, quindi aggiorni $oldValue = $value = 2
e così via, fino a che:
$oldValue=3
$value=6
$value - 1 != 3 ? SI, quindi restituisci $oldValue+1 = 4
Ciao
Marco 

 ringrazio anticipatamente  comunque :)
ciao
Alesi_27

 
ciao
Alesi_27

>
quindi la cersione corretta è questa qua sopra, azz ora lo provo subito e ti 
faccio sapere, credo di avere afferratto anche il meccanismo,
mysql_fetch_row in pratica prende un record dal database e mi restituisce un 
array con i valory per ogni campo, $row mi prende il numero di campo 0 che 
corrisponde al valore di  numero_pratica, per afferrare meglio il meccanismo 
cmq lo provo.
ci metto un poco di tempo per adattarlo ed  inserirlo nello script e ti 
faccio sapere grazie mille in ogni caso :) 

azz non avevo ricevuto il tuo primo messaggio ora provo visto che ho il tuo 
script in forma completa 

scritto così come mi hai indicato non funge...oppure io commettto qualche 
errore, ma mi dà sempre 1 come risultato ..sigh..
<?php
require("connessione.php");
$select="select numero_fascicolo_istruttoria_cdm from istruttoria_cdm order 
by numero_fascicolo_istruttoria_cdm";
$result=mysql_query ($select);
$numero_pratica=0;
$esiste=1;
 while ($row=(mysql_fetch_row($result))&& $esiste)
        {
         $numero_pratica=$numero_pratica+1;
         $esiste=($row[0]==$numero_pratica);
        }
if ($esiste) die ("nessun numero pratica disp.");
echo"<h3>benvenuto</h3><p> numero di fascicolo da inserire suggerito 
$numero_pratica";
?> 

 ?> 
ciao
Alesi_27

io nel frattempo mi sono inventato (dopo 10 ore davanti il pc a fare prove 
lol) qusta cpsetta che pare funzioni:
//suggerisce il prox numero di fascicolo
require("connessione.php");
$select1="select numero_fascicolo_istruttoria_cdm from istruttoria_cdm order 
by numero_fascicolo_istruttoria_cdm";
$result1=mysql_query ($select1);
$row2=mysql_num_rows($result1);
$d=0;
$e=1;
$l=1;
while($row3=mysql_fetch_array($result1)){
$numerofascicoloarraybis[]=$row3['numero_fascicolo_istruttoria_cdm'];
$numerofascicolobis=$numerofascicoloarraybis[$d];
$numeroprogressivoarraybis[]=$e;
$numeroprogressivobis=$numeroprogressivoarraybis[$d];
while($numeroprogressivobis==$numerofascicolobis)
{
//echo"<p>$numerofascicolobis";
//echo"$numeroprogressivobis";
//echo $numeroprogressivobis-$numerofascicolobis;
$l=$l+1;
//echo $l;
break;
}
$e=$e+1;
$d=$d+1;
}
if ($l==0)
$l=1;
$message="si suggerisce di assegnare il numero $l al fascicolo";
in pratica ordino progressivamente i numeri fascicolo, poi creo una lista di 
numeri progressivi in ordine crescente da 1 al numero tot (dove tot è 
rappresentato dal numero di record totale dei fascicoli)
poi vado a vedere dove si trova il primo risultato di (numero progressivo - 
numero di fascicolo)<0 ed in quel momento il numero di fascicolo successivo 
per logica matematica dovrà essere per forza il primo(e + piccolo) numero di 
fascicolo libero:)
grazie del grande aiuto che mi hai dato ho preso spunto dalla tua idea ^^ 

errata corrige:
poi vado a vedere dove si trova il primo risultato di (numero progressivo -
numero di fascicolo)
!=0 (avevo scritto<0 nel post precedente, anche se in effetti è proprio dove 
numero progressivo-numero fascicolo dà il risultato negativo)
ed in quel momento il numero di fascicolo successivo....