BMS-HOSxP Community

HOSxP => แจ้งปัญหา / ขอความช่วยเหลือ => ข้อความที่เริ่มโดย: arr_012 ที่ กุมภาพันธ์ 01, 2011, 14:11:01 PM

หัวข้อ: ขอความรู้ เกี่ยวกับการสุ่ม
เริ่มหัวข้อโดย: arr_012 ที่ กุมภาพันธ์ 01, 2011, 14:11:01 PM
select *from vn_stat
order by rand(10)

กับ

select *from vn_stat
order by rand()

มันต่างกันตรงไหนครับ
หัวข้อ: Re: ขอความรู้ เกี่ยวกับการสุ่ม
เริ่มหัวข้อโดย: Svl2Nuk3 ที่ กุมภาพันธ์ 01, 2011, 14:32:38 PM
select *from vn_stat
order by rand(10)

กับ

select *from vn_stat
order by rand()

มันต่างกันตรงไหนครับ

select *from vn_stat
order by rand(10)

เวลารันคำสั่งนี้แต่ละรอบค่าจะเหมือนเดิม


select *from vn_stat
order by rand()

เวลารันคำสั่งนี้แต่ละรอบค่าจะไม่เหมือนกัน


แต่อย่าลืม Limit นะครับ  ลองกด  run  หลาย ๆ รอบดูจะเห็นความแตกต่างครับ

หัวข้อ: Re: ขอความรู้ เกี่ยวกับการสุ่ม
เริ่มหัวข้อโดย: Svl2Nuk3 ที่ กุมภาพันธ์ 01, 2011, 14:40:00 PM
อ่านอันนี้เพิ่มเติมน่าจะเข้าขึ้นนะครับ  (หรือมึนขึ้นกว่าเดิม เพราะผมก็มึน)  ;D ;D ;D

RAND(), RAND(N)

Returns a random floating-point value v in the range 0 <= v < 1.0. If a constant integer argument N is specified, it is used as the seed value, which produces a repeatable sequence of column values. In the following example, note that the sequences of values produced by RAND(3) is the same both places where it occurs.

mysql> CREATE TABLE t (i INT);
Query OK, 0 rows affected (0.42 sec)

mysql> INSERT INTO t VALUES(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> SELECT i, RAND() FROM t;
+------+------------------+
| i    | RAND()           |
+------+------------------+
|    1 | 0.61914388706828 |
|    2 | 0.93845168309142 |
|    3 | 0.83482678498591 |
+------+------------------+
3 rows in set (0.00 sec)

mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 |
|    2 | 0.37307905813035 |
|    3 | 0.14808605345719 |
+------+------------------+
3 rows in set (0.00 sec)

mysql> SELECT i, RAND() FROM t;
+------+------------------+
| i    | RAND()           |
+------+------------------+
|    1 | 0.35877890638893 |
|    2 | 0.28941420772058 |
|    3 | 0.37073435016976 |
+------+------------------+
3 rows in set (0.00 sec)

mysql> SELECT i, RAND(3) FROM t;
+------+------------------+
| i    | RAND(3)          |
+------+------------------+
|    1 | 0.90576975597606 |
|    2 | 0.37307905813035 |
|    3 | 0.14808605345719 |
+------+------------------+
3 rows in set (0.01 sec)

The effect of using a nonconstant argument is undefined. As of MySQL 5.0.13, nonconstant arguments are not permitted.

To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i)). For example, to obtain a random integer in the range the range 7 <= R < 12, you could use the following statement:

http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand (http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand)
หัวข้อ: Re: ขอความรู้ เกี่ยวกับการสุ่ม
เริ่มหัวข้อโดย: arr_012 ที่ กุมภาพันธ์ 01, 2011, 14:44:55 PM
select *from vn_stat
order by rand(10)

กับ

select *from vn_stat
order by rand()

มันต่างกันตรงไหนครับ

select *from vn_stat
order by rand(10)

เวลารันคำสั่งนี้แต่ละรอบค่าจะเหมือนเดิม


select *from vn_stat
order by rand()

เวลารันคำสั่งนี้แต่ละรอบค่าจะไม่เหมือนกัน


แต่อย่าลืม Limit นะครับ  ลองกด  run  หลาย ๆ รอบดูจะเห็นความแตกต่างครับ


แล้วตัวเลขใน rand(?) มันคือค่าอะไรครับ
หัวข้อ: Re: ขอความรู้ เกี่ยวกับการสุ่ม
เริ่มหัวข้อโดย: Svl2Nuk3 ที่ กุมภาพันธ์ 01, 2011, 14:50:31 PM
rand(N)

If a constant integer argument N is specified, it is used as the seed value, which produces a repeatable sequence of column values.

มันคือค่าที่ใส่เข้าไปแล้วจะทำให้ลำดับของคอลัมเหมือนเดิมในการ query แต่ละครั้ง
แต่ค่าที่ return  ออกมาจากฟังก์ชัน  rand(N)  ไม่รู้ว่าคำนวณยังไงครับ   ;D ;D