Случайно ID от таблица

C++ JAVA
Post Reply
User avatar
bganonymous
Турист
Турист
Posts: 465
Joined: Mon Mar 19, 2012 1:36 pm

Случайно ID от таблица

Post by bganonymous » Thu Jul 10, 2014 9:55 am

Имам следната таблица в phpMyAdmin: вижте снимката.

Искам да имам една променлива (например: $get_random_id), която да показва на случаен принцип цифра от полето "user_id" в таблицата на снимката. Как става това? :)

joTunkiq
Потребител
Потребител
Posts: 826
Joined: Tue Dec 25, 2012 10:03 am
Answers: 142
Contact:

Post by joTunkiq » Thu Jul 10, 2014 10:03 am

[php]$q = mysql_query("SELECT `user_id` FROM `users`");
while($r = mysql_fetch_array($q))
{
$all_ids[] = $r['user_id'];
}

echo $all_ids[array_rand($all_ids)];[/php] :?: :?:

User avatar
bganonymous
Турист
Турист
Posts: 465
Joined: Mon Mar 19, 2012 1:36 pm

Post by bganonymous » Thu Jul 10, 2014 10:18 am

Така, ако имам ID-та: 1, 2, 3, и 4. Няма да ми показва на случаен принцип едно от тях, а ще ми показва нещо от сорта на: 1133, 1111, 1214, 1213 и т.н.

joTunkiq
Потребител
Потребител
Posts: 826
Joined: Tue Dec 25, 2012 10:03 am
Answers: 142
Contact:

Post by joTunkiq » Thu Jul 10, 2014 10:46 am

Ще си ги показва, не се безпокой, просто смени завката .. :idea: :?:

User avatar
bganonymous
Турист
Турист
Posts: 465
Joined: Mon Mar 19, 2012 1:36 pm

Post by bganonymous » Thu Jul 10, 2014 10:48 am

joTunkiq wrote:Ще си ги показва, не се безпокой, просто смени завката .. :idea: :?:
Смених заявката естествено...

joTunkiq
Потребител
Потребител
Posts: 826
Joined: Tue Dec 25, 2012 10:03 am
Answers: 142
Contact:

Post by joTunkiq » Thu Jul 10, 2014 10:50 am

я пробвай така:
[php] $all_ids = array();
$q = mysql_query("SELECT `user_id` FROM `users`");
while($r = mysql_fetch_array($q))
{
$all_ids[$r['user_id']] = $r['user_id'];
}

echo $all_ids[array_rand($all_ids)];[/php] :idea:

User avatar
bganonymous
Турист
Турист
Posts: 465
Joined: Mon Mar 19, 2012 1:36 pm

Post by bganonymous » Thu Jul 10, 2014 10:55 am

Супер си! :twisted:

fbian
Турист
Турист
Posts: 204
Joined: Sat May 26, 2012 3:55 pm
Answers: 18

Post by fbian » Thu Jul 10, 2014 1:21 pm

Няма смисъл да се записват в масив при положение,че това може да стане в заявката.
[sql]
SELECT id FROM table ORDER BY RAND() LIMIT 1[/sql]

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1573
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 163
Location: Parse error: unexpected "}" in /home/index.php on line 26

Post by anonimen » Thu Jul 10, 2014 7:28 pm

На fbian решението много по-елегантно, ако се взима само една произволна стойност. Но няколко заявки може да забавят процеса, а решението на joTunkiq може да се опрости до това:

[php]$all_ids = array();
$q = mysql_query("SELECT `user_id` FROM `users`");
while($r = mysql_fetch_array($q))
{
$all_ids[] = $r['user_id'];
}
echo array_rand($all_ids);[/php]

User avatar
index
Web-tourist
Web-tourist
Posts: 5405
Joined: Thu Sep 07, 2006 11:08 pm
Answers: 198
Contact:

Post by index » Fri Jul 11, 2014 12:52 pm

anonimen wrote:На fbian решението много по-елегантно, ако се взима само една произволна стойност. Но няколко заявки може да забавят процеса, а решението на joTunkiq може да се опрости до това:

[php]$all_ids = array();
$q = mysql_query("SELECT `user_id` FROM `users`");
while($r = mysql_fetch_array($q))
{
$all_ids[] = $r['user_id'];
}
echo array_rand($all_ids);[/php]
Не съм съгласен...
1) Селектира само номер на потребител, при което потока на данните е адски малък. И тази заявка
[sql]SELECT id FROM table ORDER BY RAND() LIMIT 1
[/sql]
би се задъхала и то не значитлено при база данни с брой записи над 7-8 милиона :)

Post Reply