Visualizzazione dei risultati da 1 a 6 su 6

Discussione: PHP-MYSQL e RANDOM

  1. #1

    PHP-MYSQL e RANDOM

    devo popolare quattro chiamate di input attraverso delle select su un DB... che ogni volta devono cambiare

    una delle quattro (con posizione random rispetto alla posizione... ma questo lo so fare ) estrae il dato da una tabella di risposte vere

    le altre tre estraggono le risposte da una tabella di risposte false (le non vere della stessa tabella)

    queste tre devono essere sempre diverse tra loro

    per ora sono a questo punto:

    <? include "logindb.php";
    $processo = $_GET['processo'];
    $posizionegiusta = rand(1,4);
    $result = mysql_query("SELECT `CODICE PROCESSO` FROM TAB_Processi WHERE PROCESSO LIKE '$processo'");
    $row = mysql_fetch_array($result);
    for ($i=1; $i<5; $i++) {
    if ($i == $posizionegiusta) {
    $result2 = mysql_query("SELECT TAB_elementi_ID FROM TAB_Relazione WHERE `CODICE PROCESSO` LIKE '$row[0]' ORDER BY RAND() LIMIT 1");
    $row2 = mysql_fetch_array($result2);
    $result3 = mysql_query("SELECT Elemento FROM TAB_elementi WHERE ID = $row2[0]");
    $row3 = mysql_fetch_array($result3);
    echo "<input type='radio' id='risp' name='risp' title='$row3[0]' value='1'> $row3[0] </input> <br>";
    }
    else
    {
    $result2 = mysql_query("SELECT TAB_elementi_ID FROM TAB_Relazione WHERE `CODICE PROCESSO` NOT LIKE '$row[0]' ORDER BY RAND() LIMIT 1");
    $row2 = mysql_fetch_array($result2);
    $result3 = mysql_query("SELECT Elemento FROM TAB_elementi WHERE ID = $row2[0]");
    $row3 = mysql_fetch_array($result3);
    echo "<input type='radio' id='risp' name='risp' title='$row3[0]' value='0'> $row3[0] </input> <br>";
    }
    }
    ?>

    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di Disema
    Registrato dal
    Sep 2014
    Messaggi
    63
    Non hai detto cosa non riesci a fare
    Comunque un consiglio, non serve che fai doppia query per selezionare i dati di una tabella in base a un altra...
    basta fare così:
    codice:
    SELECT Elemento FROM TAB_Relazione,TAB_elementi WHERE `CODICE PROCESSO`='$row[0]' AND ID=TAB_Elementi_ID ORDER BY RAND() LIMIT 1
    non ho capito solo il perchè del LIKE (ma posso sbagliare io perchè non l'ho usato mai più di tanto)
    P.S. Dal Regolamento
    6. Quando postate del codice, usate sempre i tag [ CODE ] o [ PHP ], riportare il codice semplicemente nel corpo del messaggio o in un'area di quote lo rende praticamente illeggibile (vedi nota sotto)
    Ultima modifica di Disema; 08-10-2014 a 20:47

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Secondo me puoi fare anche una query sola usando union ed evitando l'if/else, al limite mettendo un campo a valore fisso nelle due query della union (una V in quella vera e una F per ogni campo di quelle false) per tenere memoria della vera e delle false

    Poi cicli tutto il record set una volta sola per mostrare a video il risultato

  4. #4
    Grazie dei consigli

    Clasku non ho capito il tuo suggerimento... potresti spiegarmi cosa intendi con un esempio?

    Quello che io non riesco a fare è che le risposte false devono essere sempre diverse e questo non mi è garantito dall'uso del solo ORDER BY RAND()... A volte capita che ci siano due risposte false uguali e in casi limite tutte tre le risposte false sono uguali

  5. #5
    Utente di HTML.it L'avatar di Disema
    Registrato dal
    Sep 2014
    Messaggi
    63
    Al posto di fare quel order by rand allora potresti fare così:
    usi sempre quel for per metterli in ordine casuale, poi ti fai delle variabili(o un array), anch'esse casuali, che usi nelle query al posto di quel RAND().
    Comunque se puoi metti il codice dentro i tag [ PHP] che così com'è adesso ogni volta che lo rileggo mi perdo e ci sto un sacco di tempo per capire come aiutarti.

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    quello che intendevo è una cosa tipo questa, che ad occhio risolve anche il problema della "poca" casualità del random
    codice:
    SELECT campi FROM tabella WHERE id = id_risposta_vera ORDER BY RAND() LIMIT 1
    UNION 
    SELECT campi FROM tabella WHERE id != id_risposta_vera ORDER BY RAND() LIMIT 3

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 © 2026 vBulletin Solutions, Inc. All rights reserved.