10/10/2018, 09:45

Lấy một phần tử ngẫu nhiên từ 1 list ID

Mình có 1 list các ID từ MySQL, mình muốn lấy 1 phần tử ngẫu nhiên trong ID đó, tuy nhiên cái list ID của mình nó không liên tục do nhiều ID mình xóa.

Chẳng hạn như {1, 3, 5, 6, 9}

Hy vọng có các cao thủ giúp đỡ
bvnguyen viết 12:01 ngày 10/10/2018
một là load hết ra, rồi mới lấy trong số đó, hai là lặp while, cứ ngẫu nhiên một id rồi kiểm tra coi có trong mysql không, nếu có thì thoát vòng lặp
phonglanbiec viết 11:55 ngày 10/10/2018
Bạn có thể cho mình 1 code example được không? Thực ra thì mình chỉ là newbie trong php nên không rành mấy
tuanit85 viết 11:51 ngày 10/10/2018
Bạn thử thế này xem.

$query="select Id from tbl_Id order by rand() ";
$sql=mysql_query($query);

while($result=mysql_fetch_array($sql))
{

echo $result['Id'];
break;

}
cavaly viết 11:49 ngày 10/10/2018
nếu muốn chỉnh lại cái id thì vào phần operation của phpmyadmin, chỉnh lại AUTO_INCREMENT
phonglanbiec viết 12:01 ngày 10/10/2018
Được gửi bởi cavaly
nếu muốn chỉnh lại cái id thì vào phần operation của phpmyadmin, chỉnh lại AUTO_INCREMENT
Cái này mình có xài nhưng ý của mình là khi mình xóa 1 số tin thì cái phần giữa nó bị "hụt", như vậy thì không lấy random được
langtusitinh225 viết 11:47 ngày 10/10/2018
Câu lệnh MySQL để lấy 1 phần tử ngẫu nhiên:
Code:
$sql = "select id from table order by rand() limit 1";
phonglanbiec viết 12:01 ngày 10/10/2018
Được gửi bởi langtusitinh225
Câu lệnh MySQL để lấy 1 phần tử ngẫu nhiên:
Code:
$sql = "select id from table order by rand() limit 1";
Hay quá! Ngắn gọn súc tích . Cảm ơn bạn nhiều
maychu.net viết 11:45 ngày 10/10/2018
Nếu bạn có sẵn array (1, 3, 5, 6, 9)
Code:
<?php
$input = array(1, 3, 5, 6, 9);

// lấy 2 tên ngẫu nhiên trong số mấy tên có mặt
$rand_keys = array_rand($input, 2);

echo $input[$rand_keys[0]]; // Hiển thị tên đầu tiên
?>
Nếu đó là 1 chuỗi

Code:
<?php
$chuoi = "1, 3, 5, 6, 9";
$chuoi = str_replace(" ", "", $chuoi); // xóa các spacebar
$chuoi = explode(",", $chuoi); // tách chuỗi thành mảng, phân cách phần tử bằng dấu (,)
$rand_keys = array_rand($chuoi, 2);
echo $chuoi[$rand_keys[0]];
?>
Code:
<?php
$chuoi = "1 3 5 6 9";
$chuoi = explode(" ", $chuoi);
$rand_keys = array_rand($chuoi, 2);
echo $chuoi[$rand_keys[0]];
?>

Cách này đơn giản hơn nữa nè:
PHP Code:
<?php
$numbers 
= array ("1""3""5""6""9");
shuffle($numbers);
echo 
$numbers***91;0***93;;
?>
tungoso viết 11:50 ngày 10/10/2018
Được gửi bởi langtusitinh225
Câu lệnh MySQL để lấy 1 phần tử ngẫu nhiên:
Code:
$sql = "select id from table order by rand() limit 1";
Được gửi bởi phonglanbiec
Hay quá! Ngắn gọn súc tích . Cảm ơn bạn nhiều
đây đúng là cách ngắn gọn nhất, nhưng nó không phải là 1 cách hay, vì với câu truy vấn này là rất chậm. Lý do là Mysql phải tạo 1 bảng tạm với tất cả kết quả và gán cho mỗi bản ghi một chỉ số thứ tự ngẫu nhiên. Sau đó kết quả được sắp xếp và trả về kết quả. Nó sẽ thực sự là một vấn đề lớn nếu dữ liệu nhiêu. Bạn có thể dùng code bên dứoi, tuy phải thêm mấy dòng nhưng nó thực sự tối ưu về mặt hiệu năng
Code:
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` ");
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$result = mysql_query( " SELECT * FROM `table` LIMIT $offset, 1 " );
Bài liên quan
0