Jump to content
  • 0

Случайный выбор из базы


macbeth9
 Share

Question

Привет всем! Нужна помощь. У меня есть скрипт PHP, который выбирает из базы случайную запись и выводит. При обновлении страницы запись меняется. Но мне нужно сделать так чтобы запись выводилась когда я нажимаю на кнопку получить, и так каждый раз когда я буду нажимать будет выводится случайная запись. Пожалуйста помогите.

Вот код


<h1 style="padding-top:100px;" align="center"><?php
$query = "select * from vopros order by rand() limit 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
print($row['text'] . '<br>');
?>
</h1>
<input type="button" value="Получить" class="button">

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0
order by rand() limit 1
Адский ад!!!! Сколько записей в базе?

А что здесь конкретно не так?

ORDER BY RAND() очень медленно работает. Если записей много, то будут лютые тормоза. В данном случае правильно будет получить количество записей в табличке, взять случайное число от 0 до %количество_записей% и сделать

SELECT * FROM `tablename` LIMIT %наше_число%, 1

Link to comment
Share on other sites

  • 0

Вы мне помогите пожалуйста сделать чтобы по кнопке. Veseloff вы правы насчет ORDER BY RAND(), я это поменяю.

А в чём проблема-то? Что вы сделали и что у вас не получается?

Link to comment
Share on other sites

  • 0

Целый форум оффтопщиков...

PHP (создаем страницу, которая будет отдавать случайную запись, например rand_text.php):


<?php

// ... Здесь коннект с БД

$query = "select * from vopros order by rand() limit 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
print($row['text']);

?>

На странице HTML:


<h1 id="text" style="padding-top:100px;" align="center"><?php
$query = "select * from vopros order by rand() limit 1";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
print($row['text'] . '<br>');
?>
</h1>
<input id="updateTextButton" type="button" value="Получить" class="button">

jQuery JavaScript:


$('#updateTextButton').click(function(){

$.ajax({
url: "rand_text.php",
dataType: 'html',
success: function( content ){
$('#text').html();
}
});

});

Не кажется, что раздел "Коммерческие услуги" вас разбаловал?

Edited by alanvanduke
  • Like 1
Link to comment
Share on other sites

  • 0
ORDER BY RAND() очень медленно работает.

если верить разрабам мускула, планировщик прекрасно справляется с order by rand() в сабжевом случае, но адский ад однозначно будет, в случае order by rand() limit x,y. В общем, всё зависит от задачи - если подобных операций много, то имеет смысл ввести отдельную вспомогательную таблицу соответствий первичных ключей оригинальной таблицы и порядковых номеров строго по возрастанию без дырок в последовательности (то есть 1,2,3,4,...,x но не автоинкремент, так как появятся дырки при удалении), затем, если нужно получить какое-то кол-во случайных строк, сперва просто генерим случайные цифры от 1 до %количество_записей% в вспомогательной таблице, затем, смотрим какие ключи соответствуют этим номерам в основной таблице и селектим их обычным предикатом in (). В этом методе, важно не допускать дырок, которые могут появиться при удалении строк, но это всё просто решается триггерами и перестановкой индексов.

Метод требует одну дополнительную таблицу для каждой основной таблице по которой часто предполагается делать рандомные выборки, но полностью оправдывает себя в хай-лоад проектах, за счёт линейного количества выборок (кол-во выборок * 2) при любом кол-ве записей.

Link to comment
Share on other sites

  • 0

Не кажется, что раздел "Коммерческие услуги" вас разбаловал?

Нет, не кажется. Понятно, если человек вообще ничего не знает про аякс, то он спрашивает как это сделать. Получил весьма внятный ответ: «ajax». Дальше дело уже за ним — пусть разбирается что это такое и с чем это едят. Само собой, если что-то будет непонятно или же не получаться, то можно ещё раз спросить и ему опять помогут. А вот писать готовый код зло не потому что мне лень, а потому что человек никогда не научится ничему, если будет всегда следовать готовому коду, а не исходя из знаний и понимания сути предмета. Уроки господина Попова и его адепты — яркий тому пример.

Link to comment
Share on other sites

  • 0

Не кажется, что раздел "Коммерческие услуги" вас разбаловал?

Нет, не кажется. Понятно, если человек вообще ничего не знает про аякс, то он спрашивает как это сделать. Получил весьма внятный ответ: «ajax». Дальше дело уже за ним — пусть разбирается что это такое и с чем это едят. Само собой, если что-то будет непонятно или же не получаться, то можно ещё раз спросить и ему опять помогут. А вот писать готовый код зло не потому что мне лень, а потому что человек никогда не научится ничему, если будет всегда следовать готовому коду, а не исходя из знаний и понимания сути предмета. Уроки господина Попова и его адепты — яркий тому пример.

С одной стороны верно, но совсем не ясно зачем развели флуд вокруг ORDER BY RAND() и вообще ушли от темы вопроса (даже не объяснили каким образом нужно применить ajax), а потом еще и сказали, что это за деньги, хотя делов то тут на 1-2 минуты написания от руки.

Edited by alanvanduke
Link to comment
Share on other sites

  • 0

Ты привёл код с jquery, а это... ну, как резиновая женщина, для изучения мало подходит.э

А аякс применить по прямому назначению. Как ещё его можно применить-то?

Вообще-то, даже работа на 1-2 минуты может стоить денег.

Ударил молотком - 0,01 руб

Знал где ударить - 99,99 руб

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy