Php piyango konular çok kazanan sorunlar

2 Cevap php

Ben php bir piyango komut dosyası oluşturduk. Benim sorun şimdi bir kazanan daha sonra seçmektir. Oyuncular biletlerini aynı sayıda olması için mümkün olduğu için. Burada iki tablo yapıları ve kaynak kodu temin ediyorum.

lotto_game {
	id(int)
	jackpot(int)
	status(varchar10)
	pick_1(int)
	pick_2(int)
	pick_3(int)
	pick_4(int)
	pick_5(int)
	tickets_sold(int)
	winner(text)
}

 lotto_picks {
	lotto_id(int)
	user_id(int)
	choice_1(int)
	choice_2(int)
	choice_3(int)
	choice_4(int)
	choice_5(int)
	ticket_status(int)
}

Bunlar benim veritabanında benim iki tablo vardır. Örnekler uğruna biz * id 1 ile 2 kullanıcılar oluşturabilir ve komut dosyası daha sonra her pick_ içine rasgele loto numaraları eklemek 'bitmiş' için 'etkin' dan lotto_game durumunu değiştirmek için varsayalım çalıştığında 2. Peki ne olur olduğunu olacak sütun.

$one = rand(1,30);
$two = rand(1,30); 
$three = rand(1,30);
$four = rand(1,30);
$five = rand(1,30);

mysql_query("UPDATE `lotto_game` SET 
 pick_1 = '$one',
 pick_2 = '$two',
 pick_3 = '$three',
 pick_4 = '$four',
 pick_5 = '$five',
 status = 'finished'

WHERE durum = 'aktif' ");

Ben itiraf edecek çok zor değildi. Ama bu amaçla sadece başlangıcıdır.

$lotto['tickets'] = mysql_query("SELECT ticket_id FROM `lotto_picks` WHERE ticket_status='valid'");

@$lotto[winners] = mysql_query("SELECT ticket_id,user_id FROM `lotto_picks` WHERE choice_1 = '$one' AND choice_2 = '$two' AND choice_3 = '$three' AND choice_4 = '$four' AND choice_5 = '$five'");

$lotto['num_tickets'] = mysql_num_rows($lotto['tickets']);
@$lotto[winner_id] = mysql_fetch_array(@$lotto[winners]);
$lotto['jackpot'] = mysql_query("SELECT jackpot FROM `lotto_game` WHERE status='active'");

$lotto['winner_jackpot'] = mysql_fetch_array($lotto['jackpot']);
$lotto['num_winners'] = mysql_num_rows($lotto['winners']);
//echo @$lotto['num_tickets'];
//echo @$lotto['num_winners'];
$winner = $lotto['num_winners'];
//echo @$lotto['winner_id']['user_id'];
$jackpot = $lotto['winner_jackpot']['jackpot'];
$id = @$lotto[winner_id][user_id];
if ($winner == 1) {
    mysql_query("UPDATE `character` SET
    decivers = decivers +'$jackpot'
WHERE user_id='$id'");
}

Bu ben ile geldi ne olduğunu ve gerçekten bir kazanan ile çalışmak gibi görünüyor. Ama ben nereye buradan gitmek için çözemiyorum. Bazı diziler kullanarak denedim ama hiçbir şey çalışır. Ben yapılması gerektiğini biliyorum ama bunu nasıl anlamaya olamaz.

Ben kazananlar için arama yaparken ben bir dizinin tüm kullanıcı kimliği içine koymak gerekir.

Herkes bu karıştı eğer öyleyse ekstra decivers, paradır. Bilet durum gerçekten burada önemli değil ama bilmeniz gereken ise ticket_status 'geçerli' veya 'geçersiz' ise sadece belirler

2 Cevap

$winners_array = array();
if(mysql_num_rows($lotto['winners'])!=0){
  while($row =mysql_fetch_array($lotto['winners'])){
    if(!in_array($row['user_id'],$winners)) $winners[] = $row['user_id'];
  }
}

$ Kazananlar tüm kazananlar user_ids ile bir dizi olacak

i seçtim numaraları için yanlış depolama biçimlerini seçtiniz düşünüyorum. Standart yaklaşım numarası N seçilmiş ise N-inci bit kurdunuz ikili değerleri kullanmaktır.

Bu örneği ele alalım: kullanıcı "2 4 5 9 11" numaralarını seçer. 1 'e tekabül bitlerini ayarlayarak' 1306 ondalık olduğu. Şimdi piyango '1100101001000 olan "4 7 9 12 13" alır ''10100011010 verir == 6472. Ikilik gerçekleştirin ve hem de değerleri ve belirlenen bitlerin sayısını sonuç:

SELECT BIT_COUNT(1306 & 6472)

Bu hemen kullanıcının 2 doğru alır olduğunu söyler. "Tam" kazananlar seçebilirsiniz gibi kolay:

SELECT * FROM tickets WHERE BIT_COUNT(tickets.pick & lotto.pick) = 5

ya doğru alır sayısına göre bilet sıralamak

SELECT * FROM tickets ORDER BY BIT_COUNT(tickets.pick & lotto.pick) DESC