Visualizzazione risultati 1 fino 7 di 7

Discussione: Funzione alternativa a Switch o ottimizzazione

  1. #1
    Guest

    Predefinito Funzione alternativa a Switch o ottimizzazione

    Ciao a tutti,

    Ho una tabella in cui sono racchiosi dei valori progressivi del tipo
    (id) (nome) (punteggio)
    1 -- nome1 -- 10
    2 -- nome2 -- 20
    3 -- nome3 -- 35
    4 -- nome4 -- 100
    .... fino a n record ...

    in un'altra tabella mi deve prendetere il nomen a seconda del punteggio raccipulato (punteggio)

    ovvero se ho un punteggio di 22 in questa seconda tabella mi deve scrivere nome2

    soluzione che ho utilizzato:
    in un ciclo for ho assegnato a delle variabili $id(numero) $nom(numero) $pun(numero) in modo che mi restituisse:
    $id1 = 1 -- $nom1 = nome1 -- $pun1 = 10
    $id2 = 2 -- $nom2 = nome2 -- $pun2 = 20
    $id3 = 3 -- $nom3 = nome3 -- $pun3 = 35

    successivamente ho usato switch per inserire il valore nella seconda tabella analizzando il punteggio dell'individuo ($a)
    switch($a)
    // ciclo for $i per il numero di casi tabella 1
    case ($a >= $pun$i & $a <$pun$(i+1)) // semplificando $(i+1)
    ---------> sql ... insert;
    break;
    // fine ciclo
    e via cosi ....
    ma mi chiedo .... esiste qualcosa di + comodo da usare per verificare a quale id della tabella 1 corrisponde un numero $punteggio della tabella 2??

    grazie per la collaborazione ........ (scusate per la poca chiarezza se così fosse)
    DrOpS

  2. #2
    Guest

    Predefinito

    Temo di averci capito poco, comunque....

    Il caso che proponi tu io lo affronterei con gli array.
    Mi sebra abbastanza inutile istanziare n*3 variabili quando hai a disposizione gli array!

    le varicabili $id1 = 1 -- $nom1 = nome1 -- $pun1 = 10
    potrebbero diventare ad es: $valori[1] = array (nome1, 10) se vuoi un array con chiave oppure $valori = array (nome1, 10) se gli id sono sequenziali (poi vai avanti con la funzione array_push

    A questo punto cicli l'array ma non so a questo punto che cosa vuoi fare... se fai un'insert a cosa ti serve il ciclo?

    ma mi chiedo .... esiste qualcosa di + comodo da usare per verificare a quale id della tabella 1 corrisponde un numero $punteggio della tabella 2??
    Se hai due tabelle perché non fai un join?
    A cosa ti serve la cosa che hai chiesto prima?

    Ho provato a risponderti per quello che ho capito ma forse dovresti essere più chiaro.

    Ciao

  3. #3
    Guest

    Predefinito

    ehm ehm .... non sono così esperto .... mi studio che sono le join e se possono essere utili al mio caso poi ti rispondo

    cmq il discoso detto in breve è questo
    tabella 1 una serie di valori fissati da me per esempio 10 - 30 - 50 - 100

    tabella 2 ha all'interno un valore che si incrementa di giorno in giorno di una unità

    io devo raffrontare il valore della tabella 2 (facciamo per esempio che valga 35) con i valori della tabella 1 e farmi restituire la riga della tabella uno corrispondente (in questo caso la riga della tabella 1 con il valore 30)

    .... quando con il passare dei giorni il valore della tabella 2 (ex 35) diventa 51 .... deve restituirmi il valore della riga della tabella 1 corrispondente al 50 ...

    cmq .... mi vedo i suggerimenti che mi hai dato e vedo se riesco a restringere sta paginona di codice scritto da me (poco + che principiante) :P

    Grassie

  4. #4
    Guest

    Predefinito

    Bene, quindi hai due tabelle su MySQL...

    Il join non è altro che l'unione di due tabelle tra di loro tramite valori compatibili... in soldoni:

    select t1.*
    from tabella1 t1, tabella2 t2
    where t1.valore=t2.valore

    t1.valore=t2.valore è il join

    Ciao

  5. #5
    Guest

    Predefinito

    il fatto è che non ho sempre valori uguali .... ma valori della tabella 2 compresi tra i valori della tabella 1 al recor id ... id +1 ...
    comunque il join mi facilita la prima parte

    ovvero scritto da principiante è una cosa del genere che ovviamente non funziona

    --------------------------
    <?php
    include "config.php";
    $i_pun=0;
    $num=0;
    $result_pun = mysql_query( "select * from araldica ORDER BY idaraldica", $conn )
    or die ("errore1" . mysql_error());
    $num_pun = mysql_num_rows($result_pun)
    or die ("errore1" . mysql_error());
    while($i_pun < $num_pun )
    {
    $num = $i_pun +1;
    $nom[$num] = mysql_result($result_pun,$i_pun,"araldica");
    $im[$num] = mysql_result($result_pun,$i_pun,"imaraldica");
    $valore[$num] = mysql_result($result_pun,$i_pun,"punteggio");
    echo "araldica" . $num . " = " . $nom[$num] . " -- immagine " . $im[$num] . " -- valore " . $valore[$num] . "<br>";
    $i_pun++;
    }
    $punteggio = 40;
    $valore[0]=0;
    $a=$num_pun +1;
    $valore[$a] = 99999999999;
    $i_val = 0;
    switch ($punteggio)
    {
    for($i_val < $num_pun )
    {
    $succ = $i_val+1;
    case ( ($punteggio >= $valore[$i_val]) & ($punteggio < $valore[$succ])
    echo "caso corretto Punteggio definito= " . $punteggio . " araldica assegnata = " . $nom[$succ];
    break;
    $i_val++;
    }
    }
    ?>
    --------------------
    da paura ..... grassie

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da alchimisti
    il fatto è che non ho sempre valori uguali .... ma valori della tabella 2 compresi tra i valori della tabella 1 al recor id ... id +1 ...
    comunque il join mi facilita la prima parte
    ......
    Beh, allora al posto del join utilizza il between o qualcosa del genere (< > all'interno della query)....
    Comunque agisci sulla query e poi tutto quel papocchio che hai fatto ti si semplifica.
    Ho dato un'occhiata veloce al codice e dovrei avere un po' più di tempo di quello che ho adesso per darti una buona mano, comunque mi pare di capire che se fai bene la query diminuisci di due terzi il codice.

    Buon lavoro
    Ultima modifica di golfox : 29-10-2004 alle ore 11.59.57

  7. #7
    Guest

    Predefinito

    ok un pezzo è fatto questo finge ... http://www.bravewind.altervista.org/...drops/punt.php

    è il codice usato è:
    include "config.php";
    $i_pun=0;
    $num=0;
    $result_pun = mysql_query( "select * from araldica ORDER BY idaraldica", $conn )
    or die ("errore1" . mysql_error());
    $num_pun = mysql_num_rows($result_pun)
    or die ("errore1" . mysql_error());
    while($i_pun < $num_pun )
    {
    $num = $i_pun +1;
    $id[$num] = mysql_result($result_pun,$i_pun,"id");
    $nom[$num] = mysql_result($result_pun,$i_pun,"araldica");
    $im[$num] = mysql_result($result_pun,$i_pun,"imaraldica");
    $valore[$num] = mysql_result($result_pun,$i_pun,"punteggio");
    echo "id " . $id[$num] . " -- araldica" . $num . " = " . $nom[$num] . " -- immagine " . $im[$num] . " -- valore " . $valore[$num] . "<br>";
    $i_pun++;
    }
    $valore[0]=0;
    $a=$num_pun +1;
    $valore[$a] = 99999999999;
    for($i_val = 0;$i_val < $num_pun;$i_val++)
    {
    $succ = $i_val +1;
    if ( ($punteggio >= $valore[$i_val]) & ($punteggio < $valore[$succ]))
    {
    echo "caso corretto Punteggio definito= " . $punteggio . " araldica assegnata = " . $nom[$succ];
    }
    }
    if ($punteggio >= $valore[$num_pun])
    {
    echo "1caso corretto Punteggio definito= " . $punteggio . " araldica assegnata = " . $nom[$succ];
    }?>
    -------------
    ora le semplificazioni :smile:

Regole di scrittura

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