是否可以在同一天内获取随机物品?
例如:
+----+---------------------+ | id | md | +----+---------------------+ | 1 | 2010-06-27 11:26:01 | | 2 | 2010-06-27 11:28:20 | | 3 | 2010-06-27 11:29:46 | | 4 | 2010-06-27 11:30:50 | | 5 | 2010-06-27 12:20:56 | | 6 | 2010-06-27 12:27:42 | | 7 | 2010-06-27 15:14:05 | | 8 | 2010-07-06 01:53:33 | | 9 | 2010-07-06 01:52:52 | +----+---------------------+
我想在同一天内挑选随机商品,但同时我希望按日期desc订购。像这样:
+----+---------------------+ | id | md | +----+---------------------+ | 8 | 2010-07-06 01:53:33 | random block | 9 | 2010-07-06 01:52:52 | | 2 | 2010-06-27 11:28:20 | random block | 4 | 2010-06-27 11:30:50 | | 1 | 2010-06-27 11:26:01 | | 6 | 2010-06-27 12:27:42 | | 3 | 2010-06-27 11:29:46 | | 5 | 2010-06-27 12:20:56 | | 7 | 2010-06-27 15:14:05 | +----+---------------------+
不知道如何开始或者甚至可能这样做,因为rand()的顺序不会接受分组。
答案 0 :(得分:5)
非常简单:
SELECT *
FROM tbl
ORDER BY md DESC, RAND()
答案 1 :(得分:3)
可能效率不高,但请尝试
select * from (select * from tbl order by rand()) as t group by date(md)
答案 2 :(得分:2)
如果我已正确理解你的问题,这应该可以解决问题:
SELECT * FROM table1 ORDER BY DATE(md) DESC, RAND();
示例:
DROP TABLE IF EXISTS `table1`;
CREATE TABLE `table1` (
`id` int(11) NOT NULL auto_increment,
`md` DATETIME,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
DELIMITER //
DROP PROCEDURE IF EXISTS autofill//
CREATE PROCEDURE autofill()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 50 DO
INSERT INTO table1 (md) VALUES (DATE_ADD(NOW(), INTERVAL FLOOR(RAND() * 1000) HOUR));
SET i = i + 1;
END WHILE;
END;
//
DELIMITER ;
CALL autofill();
SELECT * FROM table1 ORDER BY DATE(md) DESC, RAND();
+----+---------------------+
| id | md |
+----+---------------------+
| 8 | 2010-08-16 13:46:04 |
| 16 | 2010-08-15 19:46:05 |
| 47 | 2010-08-15 18:46:06 |
| 25 | 2010-08-15 15:46:05 |
| 33 | 2010-08-15 09:46:05 |
| 3 | 2010-08-14 20:46:04 |
| 45 | 2010-08-13 03:46:06 |
| 17 | 2010-08-12 13:46:05 |
| 12 | 2010-08-12 06:46:05 |
| 7 | 2010-08-12 15:46:04 |
| 37 | 2010-08-12 14:46:05 |
| 40 | 2010-08-10 05:46:06 |
| 13 | 2010-08-09 10:46:05 |
| 4 | 2010-08-09 00:46:04 |
| 1 | 2010-08-06 12:46:04 |
| 28 | 2010-08-02 23:46:05 |
| 15 | 2010-08-02 10:46:05 |
| 2 | 2010-08-02 01:46:04 |
| 38 | 2010-07-31 13:46:06 |
| 27 | 2010-07-31 04:46:05 |
| 30 | 2010-07-31 03:46:05 |
| 22 | 2010-07-31 08:46:05 |
| 50 | 2010-07-30 05:46:06 |
| 11 | 2010-07-28 13:46:05 |
| 18 | 2010-07-28 21:46:05 |
| 29 | 2010-07-27 23:46:05 |
| 35 | 2010-07-27 11:46:05 |
| 6 | 2010-07-26 20:46:04 |
| 20 | 2010-07-25 03:46:05 |
| 31 | 2010-07-23 07:46:05 |
| 14 | 2010-07-23 23:46:05 |
| 23 | 2010-07-23 10:46:05 |
| 48 | 2010-07-23 17:46:06 |
| 42 | 2010-07-21 03:46:06 |
| 39 | 2010-07-20 05:46:06 |
| 36 | 2010-07-18 05:46:05 |
| 10 | 2010-07-17 01:46:05 |
| 32 | 2010-07-16 06:46:05 |
| 9 | 2010-07-16 15:46:04 |
| 24 | 2010-07-16 10:46:05 |
| 43 | 2010-07-16 09:46:06 |
| 5 | 2010-07-14 01:46:04 |
| 21 | 2010-07-14 08:46:05 |
| 49 | 2010-07-13 07:46:06 |
| 41 | 2010-07-13 15:46:06 |
| 46 | 2010-07-12 04:46:06 |
| 44 | 2010-07-11 16:46:06 |
| 26 | 2010-07-10 14:46:05 |
| 34 | 2010-07-09 16:46:05 |
| 19 | 2010-07-07 01:46:05 |
+----+---------------------+
答案 3 :(得分:1)
您可以使用WHERE子句...
WHERE date = 'insert date' ORDER BY rand() LIMIT 1`
然后使用PHP在每个日期的字符串中插入日期。
或者只使用一个MySQL查询,只需按日期降序排序,然后使用PHP将它们全部拉出来......
while ($item = mysql_fetch_array($query)):
// process to figure out the date (I'm sure you can do that)
$mydates[$date][] = $id; // add that ID to that date array
endwhile;
foreach ($mydates as $date):
$key = array_rand($date);
endforeach;