Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybieranie losowo wartości liczbowej
Forum PHP.pl > Forum > Bazy danych > MySQL
xamrex
Witam, mam taką sobie tabelę z grami:
  1. CREATE TABLE `nuke_bbgames` (
  2. `game_id` mediumint(8) NOT NULL AUTO_INCREMENT,
  3. `game_pic` varchar(50) NOT NULL DEFAULT '',
  4. `game_desc` varchar(255) NOT NULL DEFAULT '',
  5. `game_highscore` int(11) NOT NULL DEFAULT '0',
  6. `game_highdate` int(11) NOT NULL DEFAULT '0',
  7. `game_highuser` mediumint(8) NOT NULL DEFAULT '0',
  8. `game_name` varchar(50) NOT NULL DEFAULT '',
  9. `game_swf` varchar(50) NOT NULL DEFAULT '',
  10. `game_scorevar` varchar(30) NOT NULL DEFAULT '',
  11. `game_type` tinyint(4) NOT NULL DEFAULT '0',
  12. `game_width` mediumint(5) NOT NULL DEFAULT '550',
  13. `game_height` varchar(5) NOT NULL DEFAULT '380',
  14. `game_order` mediumint(8) NOT NULL DEFAULT '0',
  15. `game_set` mediumint(8) NOT NULL DEFAULT '0',
  16. `arcade_catid` mediumint(8) NOT NULL DEFAULT '1',
  17. KEY `game_id` (`game_id`)
  18. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=732 ;
  19.  
  20. --
  21. -- Zrzut danych tabeli `nuke_bbgames`
  22. --
  23.  
  24. INSERT INTO `nuke_bbgames` VALUES (29, 'alias3mp.gif', 'Strzelaj w obcych', 119458, 1216491687, 462, 'Wojownik', 'alias3mp.swf', 'alias3mp', 4, 500, '500', 130, 52, 2);
  25. INSERT INTO `nuke_bbgames` VALUES (28, 'yeti_gorez.gif', 'Odbij pingwinem, najlepiej jak wpadnie na miny:)', 13373, 1261787939, 568, 'Odbij pingwindem 2', 'yeti_gorez.swf', 'yeti_gorez', 4, 500, '320', 120, 302, 1);
  26. INSERT INTO `nuke_bbgames` VALUES (146, 'crashcurl.gif', 'Jak dalego potrafisz wybić manekina ?', 2922, 1203940710, 1018, 'Lot manekinem:P', 'crashcurl.swf', 'crashcurl', 4, 650, '380', 1170, 51, 2);
  27. INSERT INTO `nuke_bbgames` VALUES (99, 'bunkerSte.gif', 'Strzelaj we wrogie oddziały ;) polecam', 2105, 1180808822, 646, 'Bunkier', 'bunkerSte.swf', 'bunkerSte', 4, 750, '550', 820, 89, 4);
  28. INSERT INTO `nuke_bbgames` VALUES (69, 'fad2003.gif', 'Leć patszkiem', 2857, 1243782188, 1328, 'Ptaszek', 'fad2003.swf', 'fad2003', 4, 500, '300', 520, 2122, 2);
  29. INSERT INTO `nuke_bbgames` VALUES (25, 'pingusportsIBPAG.gif', 'Zbijaj klocki lodu pingwinem', 390, 1216668373, 61, 'Klocki lodu', 'pingusportsIBPAG.swf', 'pingusportsIBPAG', 4, 500, '500', 90, 297, 1);
  30. INSERT INTO `nuke_bbgames` VALUES (26, 'yeti1.gif', 'Odbij pingwinem jak najdalej', 1499, 1185994298, 849, 'Odbij pingwinem', 'yeti1.swf', 'yeti1', 4, 500, '500', 100, 2144, 1);
  31. INSERT INTO `nuke_bbgames` VALUES (17, 'chopperchallengeSte.gif', 'Leć helikopterem', 4274, 1244789589, 112, 'Helikopter', 'chopperchallengeSte.swf', 'chopperchallengeSte', 4, 500, '500', 10, 127, 2);
  32. INSERT INTO `nuke_bbgames` VALUES (18, 'sheepracermp.gif', 'Owca na motorze', 1271, 1216579705, 1018, 'Owca', 'sheepracermp.swf', 'sheepracermp', 4, 500, '500', 20, 242, 3);
  33. INSERT INTO `nuke_bbgames` VALUES (31, 'bubblegumrunmp.gif', 'Zbieraj uśmiechy', 25000, 1148482191, 126, 'Guma', 'bubblegumrunmp.swf', 'bubblegumrunmp', 4, 500, '500', 150, 254, 2);
  34. INSERT INTO `nuke_bbgames` VALUES (32, 'bubblesEF.gif', 'Zbieraj bąbelki i bonusy', 2815, 1222874519, 289, 'Bąbelka', 'bubblesEF.swf', 'bubblesEF', 4, 500, '500', 160, 645, 2);
  35. INSERT INTO `nuke_bbgames` VALUES (33, 'crazycstlEF.gif', 'Obroń zamek przed potworami.', 449400, 1146670968, 77, 'Zamek', 'crazycstlEF.swf', 'crazycstlEF', 4, 500, '500', 170, 274, 4);
  36. INSERT INTO `nuke_bbgames` VALUES (34, 'cubshoot3mp.gif', 'Strzel tak by jak najdalej leciał (LPM) leci wyżej', 7549, 1256886307, 1328, 'Kotek', 'cubshoot3mp.swf', 'cubshoot3mp', 4, 500, '500', 180, 223, 5);
  37. INSERT INTO `nuke_bbgames` VALUES (384, 'cubshoot2EF.gif', 'Strzel jak najbliżej 100', 476, 1204231370, 793, 'Kotek 2', 'cubshoot2EF.swf', 'cubshoot2EF', 4, 550, '380', 3370, 1257, 5);
  38. INSERT INTO `nuke_bbgames` VALUES (37, 'dynamitmp.gif', 'Odbijaj dynamitem tylko go nie upuść', 427, 1203632824, 457, 'Dynamit', 'dynamitmp.swf', 'dynamitmp', 4, 500, '500', 210, 95, 5);
  39. INSERT INTO `nuke_bbgames` VALUES (67, 'acne-be-gone.gif', 'Wyciskaj pryszcze', 16200, 1152551067, 185, 'Pryszcz', 'acne-be-gone.swf', 'acne-be-gone', 4, 500, '500', 500, 387, 2);
  40. INSERT INTO `nuke_bbgames` VALUES (39, 'fastfoodEF.gif', 'Zbieraj jedzonko (nie czaski)', 130006, 1214399773, 1018, 'Jedzonko', 'fastfoodEF.swf', 'fastfoodEF', 4, 500, '400', 230, 259, 2);
  41. INSERT INTO `nuke_bbgames` VALUES (40, 'flappySYKOECT.gif', 'Rozwalaj ptakiem balony', 6010, 1256886151, 112, 'Ptak', 'flappySYKOECT.swf', 'flappySYKOECT', 4, 500, '500', 240, 975, 2);
  42. INSERT INTO `nuke_bbgames` VALUES (41, 'flashballEF.gif', 'Odbijaj piłeczkę', 3125, 1257489911, 1328, 'Piłeczka', 'flashballEF.swf', 'flashballEF', 4, 500, '500', 250, 213, 13);
  43. INSERT INTO `nuke_bbgames` VALUES (42, 'grvtybll2EF.gif', 'Odbijaj kałczukiem', 21750, 1148634656, 112, 'Kałczuk', 'grvtybll2EF.swf', 'grvtybll2EF', 4, 500, '500', 260, 76, 13);
  44. INSERT INTO `nuke_bbgames` VALUES (43, 'jakeEF.gif', 'Rzucaj posilkami', 66, 1217542590, 568, 'Kelner', 'jakeEF.swf', 'jakeEF', 4, 500, '500', 270, 375, 4);


No i tak, chciałbym sobie losowo generować jakąś grę (game_id) z jakiejś kategorii(arcade_catid)

No i napotkałem problem z generowaniem losowo jakiejś gry,
Bo gdy użyjemy random, to może nam wygenerować cyfrę np. 424242 a ja nie będę miał takiego game_id, więc gry nie wyświetli.
Co zrobić, aby sprawdzić jaka jest najwyższa, a jaka najniższa wartość game_id w danej kategorii?

Proszę o pomoc smile.gif
wookieb
http://www.greggdev.com/web/articles.php?id=6
xamrex
Dzięki
Tutaj już gotowe: (gdyby ktoś tez tego szukał)
  1. $wynik = mysql_query("select * from nuke_bbgames WHERE arcade_catid = 1 ORDER BY RAND() LIMIT 1");
  2. echo mysql_result( $wynik, 0) ;
Mchl
Miej tylko świadomość, że ORDER BY RAND() robi się coraz wolniejsze w miarę tego im więcej jest rekordów w tabeli. Sposób podany w powyższym linku jest pod względem lepszy.
xamrex
Cytat(Mchl @ 6.03.2010, 22:20:22 ) *
Miej tylko świadomość, że ORDER BY RAND() robi się coraz wolniejsze w miarę tego im więcej jest rekordów w tabeli. Sposób podany w powyższym linku jest pod względem lepszy.

W jakim linku?

2. Mam jeszcze pewien problem odnośnie tego.
Załóżmy, że moja tabela składa się z tylko z game_id oraz arcade_catid
Napisałem sobie coś takiego:
  1. $loskategoria = $row['arcade_catid'];
  2. $wynik = mysql_query("select game_id from nuke_bbgames WHERE arcade_catid = $loskategoria ORDER BY RAND() LIMIT 4"); // przypisuje do zmiennej tresc zapytania
  3. $wynik1 =mysql_result( $wynik, 0) ;
  4. $wynik2 =mysql_result( $wynik, 1) ;
  5. $wynik3 =mysql_result( $wynik, 2) ;


#Przypadek 1
$loskategoria = 1

No i gdy w tabeli jest np. 30 wpisów z arcade_catid = 1 to nie ma problemu. (wtedy ładnie losuje)
NP.
  1. INSERT INTO `nuke_bbgames` VALUES (1,1);
  2. INSERT INTO `nuke_bbgames` VALUES (2,1);
  3. INSERT INTO `nuke_bbgames` VALUES (3,1);
  4. INSERT INTO `nuke_bbgames` VALUES (4,1);
  5. INSERT INTO `nuke_bbgames` VALUES (5,2);
  6. INSERT INTO `nuke_bbgames` VALUES (6,1);
  7. INSERT INTO `nuke_bbgames` VALUES (7,2);
  8. INSERT INTO `nuke_bbgames` VALUES (8,1);


I wtedy $wynik1,$wynik2 i $wynik3 ma jakąś wartość, jest OK

#Przypadek 2
$loskategoria = 2
I teraz mamy tylko dwie możliwości do losowania.
I $wynik1,$wynik2 ma wartość a $wynik3 wyskakuje błąd
Kod
Unable to jump to row 3 on MySQL result index 106


W jaki sposób to rozwiązać?
Mchl
Tym które wookieb podał
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.