come creare un sistema ranking tra due tabelle (TOMBOLA/BINGO)

francesco_cri

Nuovo Utente
9 Gen 2016
4
0
0
buongiorno a tutti, sono nuovo del forum e girovagando mi sono accorto che contiene molte dritte interessanti..e subito mi precipito per chiedere aiuto se qualcuno conoscesse la soluzione per il mio dilemma..

sto sviluppando un GESTIONALE BINGO TOMBOLA in PHP e JAVASCRIPT e pur essendo quasi alla fine mi manca solo da creare un sistema che mostri in PHP in ordine tramite QUERY MYSQL, l'ID delle cartelle che sono più in vantaggio (cioè quella che ha più numeri presenti dentro la tabella ESTRAZIONE in ordine di quella con più e meno numeri)..

SEMPLICE? IO NON RIESCO..E' POSSIBILE?


ho un mysql con due tabelle

Tabella "ESTRAZIONE" con all'interno i campi ID e NUMERO_ESTRATTO
Tabella "CARTELLE" con all'interno i campi ID e C1,C2,C3,C4,C5 ecc.. fino a C27

Grazie mille

:crying:
:crying:
:crying:
 
ciao
può darsi che mi sbagli ma penso che tu non possa risolvere il problema tramite una querry ma ti serva uno script php
ti spsto nella sezione php (se qualcuno risolve solo con una query ti riporto in mysql)
 
Tabella "ESTRAZIONE" con all'interno i campi ID e NUMERO_ESTRATTO
Tabella "CARTELLE" con all'interno i campi ID e C1,C2,C3,C4,C5 ecc.. fino a C27

forse ...
Codice:
select a.id as id, sum(a.counter) as counter from
(
select CARTELLE.id as id, 1 as counter from CARTELLE, ESTRAZIONE where C1 = NUMERO_ESTRATTO union
select CARTELLE.id as id, 1 as counter from CARTELLE, ESTRAZIONE where C2 = NUMERO_ESTRATTO union
select CARTELLE.id as id, 1 as counter from CARTELLE, ESTRAZIONE where C3 = NUMERO_ESTRATTO union
....
select CARTELLE.id as id, 1 as counter from CARTELLE, ESTRAZIONE where C26 = NUMERO_ESTRATTO union
select CARTELLE.id as id, 1 as counter from CARTELLE, ESTRAZIONE where C27 = NUMERO_ESTRATTO
) a
group by id
order by counter desc, id

ma la scorsa notte ho dormito male, con qualche problema di stomaco, per cui se non funziona .... pazienza
 
ciao innanzitutto grazie per la tua disponibilità e cortese risposta con tutto il mal di stomaco che spero sia passato.
:rolleyes:

ho provato il codice, sembra che sia proprio quello che cerco ma il problema è che i numeri delle cartelle vengono elencati in ordine per esempio (7001,7002,7003,7004, ecc...) anzichè nell'ordine decrescente cioè la cartella che ha più numeri presenti dentro la colonna NUMERI_ESTRATTI dovrebbe essere vista in alto a tutte...ti posto il codice:

PHP:
<?php
header("Refresh: 2");
require "config.php.inc";
$conn = new mysqli($linkdata, $username, $password, $database);
$sql = "
select a.NUMERO_CARTELLA as NUMERO_CARTELLA, sum(a.counter) as counter from
(
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C1 = NUMERO_ESTRATTO union
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C2 = NUMERO_ESTRATTO union
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C3 = NUMERO_ESTRATTO union
eccc...
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C27 = NUMERO_ESTRATTO
) a
group by NUMERO_CARTELLA
order by counter desc, NUMERO_CARTELLA
";
$result = $conn->query($sql);
if ($result->num_rows > 0) {while($row = $result->fetch_assoc()) {
$NUMERO_CARTELLA = $row["NUMERO_CARTELLA"];
ECHO $NUMERO_CARTELLA."<BR>";
}}
$conn->close();
?>

(HO SOSTITUITO IL CAMPO ID DELLE CARTELLE CON IL CAMPO NUMERO_CARTELLA)

Grazie mille e buona giornata
Francesco.
 
ho provato ha eliminare la dicitura:

PHP:
group by NUMERO_CARTELLA
order by counter desc, NUMERO_CARTELLA

ma il ranking non è corretto, in pratica quando nella colonna NUMERI_ESTRATTI ci sono tutti i numeri (più un valore vuoto poichè alcuni campi della cartella sono vuoti) della cartella, l'ordine non è più come prima ma comunque non in ordine di ranking.

sembra impossibile da realizzare
 
PHP:
<?php
header("Refresh: 2");
require "config.php.inc";
$conn = new mysqli($linkdata, $username, $password, $database);
$sql = "
select a.NUMERO_CARTELLA as NUMERO_CARTELLA, sum(a.counter) as counter from
(
select a.NUMERO_CARTELLA as NUMERO_CARTELLA, sum(a.counter) as counter from
(
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C1 = NUMERO_ESTRATTO union
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C2 = NUMERO_ESTRATTO union
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C3 = NUMERO_ESTRATTO union
...
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C27 = NUMERO_ESTRATTO
) a
group by a.NUMERO_CARTELLA
order by sum(a.counter) desc, a.NUMERO_CARTELLA
";
$result = $conn->query($sql);
if ($result->num_rows > 0)
    {
    $RANK = 0;
    $OLD_COUNTER = 0;
    while($row = $result->fetch_assoc())
        {
        $COUNTER = $row["counter"];
        $NUMERO_CARTELLA = $row["NUMERO_CARTELLA"];
        if ($COUNTER != $OLD_COUNTER) ++$RANK
        $OLD_COUNTER = $COUNTER;
        ECHO $RANK." - ".$COUNTER." - ".$NUMERO_CARTELLA."<br />";
    }   }
$conn->close
dovrebbe darti il rank,
in ms sql esiste la funzione "rank" ma non conosco mysql e non so se esiste altrettanto
prova e fai sapere
se dovessero esserci ancora problemi, essendo lungo costruire un esempio, per favore posta i record (zip) che usi per le tue prove
ciao
Marino
 
ciao ho cercato informazioni sulla funzione rank ma a quanto pare non è fattibile in queste circostanze, in pratica quella funzione va a prendere quanti elementi per colonna..qui si parla di contare gli elementi in 27 campi diversi quanti essi siano nella colonna NUMERI_ESTRATTI sita in altra tabella e mettere in alto il numero della cartella che possiede più campi all'interno della colonna NUMERI_ESTRATTI..

ho provato il codice e non funziona..ho apportato qualche correzione ovviamente e ancora non riesco..ho provato in tutti i modi..il discorso del COUNTER dentro l'sql mi è sembrata davvero una buona idea e infatti mi sa proprio che è il conuter che appunto non conta come si deve..o forse è il php che non conta bene..

HELP :dipser:

PHP:
 <?php
header("Refresh: 2");
require "config.php.inc";
$conn = new mysqli($linkdata, $username, $password, $database);
$sql = "
select a.NUMERO_CARTELLA as NUMERO_CARTELLA, sum(a.counter) as counter from
(
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C1 = NUMERO_ESTRATTO union
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C2 = NUMERO_ESTRATTO union
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C3 = NUMERO_ESTRATTO union
...
select CARTELLE.NUMERO_CARTELLA as NUMERO_CARTELLA, 1 as counter from CARTELLE, ESTRAZIONI where C27 = NUMERO_ESTRATTO
) a
group by a.NUMERO_CARTELLA
order by sum(a.counter) desc, a.NUMERO_CARTELLA
";
$result = $conn->query($sql);
if ($result->num_rows > 0)
    {
    $RANK = 0;
    $OLD_COUNTER = 0;
    while($row = $result->fetch_assoc())
        {
        $COUNTER = $row["counter"];
        $NUMERO_CARTELLA = $row["NUMERO_CARTELLA"];
        if ($COUNTER != $OLD_COUNTER) {++$RANK;}
        $OLD_COUNTER = $COUNTER;
        ECHO $RANK." - ".$COUNTER." - ".$NUMERO_CARTELLA."<br />";
    }   }
$conn->close();
?>
 
ciao
forse è una put...ta, potresti provare questo (ove posso preferisco usare la via script che via query a mysql a mio parere meno manutentibile e//o modificabile) anche se non so se funziona perchè non mi sono fatto il db e quindi non l'ho provato
PHP:
<?php
//.....
$tot=array();
$q_cart=mysqli_query($conn,"SELECT * FROM cartelle");
while($cart=mysqli_fetch_array($q_cart, MYSQL_ASSOC)){
	$num_cart=$cart['numero_cartella'];
	$q_estr=mysqli_query($conn,"SELECT * FROM estrazione");
	while($estratto=mysqli_fetch_array($q_estr, MYSQL_ASSOC)){
		for($k=1; $k<=27; $k++){
			$campo="C".$k;
			if($cart[$campo]==$estratto['numero_estratto']){$tot[$num_cart]++;}
		}
	}
}
sort($tot);
foreach($tot as $cartella => $trovati){
	echo "la cartella $cartella ha $trovati numeri presenti<br>";
}
//.....
?>
se non funzia butta via tutto
 

Discussioni simili