$query = "SELECT * FROM $table_name WHERE `score`>=$i and `id`>=$id LIMIT 1";$i - это случайной число в пределах 5 и 100...
$id - это случайный id - порядковый номер у каждой строки в БД...
Вытащить получается..но не всегда, есть дыры, потому что иногда счёт в выбранной по id строке не совпадает...
Как убрать дыры? И как вообще сделать нормально мою задумку?)
Просто в php новичок, в основном занимаюсь flash)) Спасибо.
Спустя 29 минут, 20 секунд (23.08.2011 - 07:40) linker написал(а):
$query = "SELECT * FROM $table_name WHERE `score`>=$i and `id`>=$id ORDER BY RAND() LIMIT 1";либо сначала
$query = "SELECT * FROM $table_name WHERE `score`>=$i and `id`>=$id";потом результат сгребаем в массив на PHP, после чего из полученного массива получаем случайный элемент array_rand().
Спустя 4 минуты, 2 секунды (23.08.2011 - 07:44) kirik написал(а):
Ухх, linker :) Всё равно запостю)
Цитата (geka96 @ 23.08.2011 - 00:11) |
есть дыры, потому что иногда счёт в выбранной по id строке не совпадает... |
Странно.. у вас ведь AND стоит, а значит должно выводиться правильно.
Есть штука такая ORDER BY RAND() - поможет вытащить случайную запись.
Тоесть:
$query = "SELECT * FROM $table_name WHERE `score`>=$i AND `id`>=$id ORDER BY RAND() LIMIT 1";
Всё было бы замечательно, если бы не одно НО. ORDER BY RAND() довольно ресурсозатратная операция. И если у вас будет большая таблица и много подобных запросов, то есть вероятность что mysql "упадёт" (при условии что под WHERE попадает много записей).
UPD
linker, там во втором запросе LIMIT 1 надо убрать.
Спустя 27 минут, 22 секунды (23.08.2011 - 08:12) geka96 написал(а):
kirik, спасибо..) Уже один раз использовал ORDER BY RAND(), понял что это такое, через 2 часа после запуска заблокировали хостинг и полетела MySQL...)
Тогда сделаю так, если "дыра" - то ищем заного...) Только не знаю..как проверить, что дыра!?)
Тогда сделаю так, если "дыра" - то ищем заного...) Только не знаю..как проверить, что дыра!?)
Спустя 6 минут, 32 секунды (23.08.2011 - 08:18) kirik написал(а):
Цитата (geka96 @ 23.08.2011 - 01:12) |
Тогда сделаю так, если "дыра" - то ищем заного...) |
Лучше уж тогда сделать как написал linker (второй вариант), только LIMIT поставить, например 50.. или 100.
Спустя 7 минут, 16 секунд (23.08.2011 - 08:26) geka96 написал(а):
kirik, странно..но даже если поставить LIMIT 50, то всё равно точно такие же дыры...в чём может быть дело?
Спустя 8 минут, 42 секунды (23.08.2011 - 08:34) kirik написал(а):
Цитата (geka96 @ 23.08.2011 - 01:26) |
в чём может быть дело? |
Не могу знать.. давай дамп
Спустя 9 минут, 42 секунды (23.08.2011 - 08:44) linker написал(а):
kirik
Ага, копи-паст - с..ко коварный. Убрал. Думается мне, условие `id`>=$id можно и убрать.
Ага, копи-паст - с..ко коварный. Убрал. Думается мне, условие `id`>=$id можно и убрать.
Спустя 3 минуты, 45 секунд (23.08.2011 - 08:48) geka96 написал(а):
kirik, я так доволен)) Разобрался..короче максимальный счёт у игроков же 100, а рандомное число задается в пределах от 0 до 100...и кода я делал выборку из БД, то надо было писать не score>=i, а score<=i =) Потому что, если рандомное число выпадет например 100 и я пытаюсь вытащить значение которое больше 100, а в БД такого нету, вот и дыры из-за этого)) Спасибо))
UP только теперь получилось, что вытаскивается строка у которой score < i...т.е. может и попасться score равное 0..а мне это не нужно..т.е. как можно сделать, чтобы вытаскивалась строка у которой score < i и >5 !??
---------
Всё втупил...вот так: `score`<=$i and `score`>=5
UP только теперь получилось, что вытаскивается строка у которой score < i...т.е. может и попасться score равное 0..а мне это не нужно..т.е. как можно сделать, чтобы вытаскивалась строка у которой score < i и >5 !??
---------
Всё втупил...вот так: `score`<=$i and `score`>=5
Спустя 17 минут, 14 секунд (23.08.2011 - 09:05) linker написал(а):
Ну сделай так
$i = rand(5, 100);
echo $query = "SELECT * FROM `table_name` WHERE " . ($i > 50 ? "`score` >= 5 AND `score` <= " . $i : "`score` >= " . $i);
_____________
Пока они пьют водку и катаются на скейтах, мы строим бизнес и делаем деньги!